0

嗨,我有一个 1 json 如下

"first": [
{
  "projectid": "15",
  "approval_status": "A"
},
{
  "projectid": "24",
  "approval_status": "A"
}  ]}

下一个有效负载存储在 flowVariable 中

{
 "Second": [
{
  "projectid": "15",
  "total": "123",
  "updated": "yes"
},
   {
  "projectid": "24",
  "total": "123",
  "updated": "yes"
}]}

我正在使用 datawevae 合并这些有效负载,但它没有给出预期的结果,我的预期值是

 {
 "Result": [
{
  "projectid": "15",
  "total": "123",
  "approval_status": "A"
},
   {
  "projectid": "24",
  "total": "123",
  "approval_status": "A"
}]}
4

2 回答 2

0

我不确定你如何同时获得两个有效载荷

但是,如果您能够同时获得有效负载并能够保存到 2 个流变量中,那么您可以使用表达式转换器来构建您的组合有效负载。
下面是一个示例,您可以尝试动态组合有效负载:-

     <set-payload value="{
    &quot;first&quot;: [{
        &quot;projectid&quot;: &quot;15&quot;,
        &quot;approval_status&quot;: &quot;A&quot;
    }, {
        &quot;projectid&quot;: &quot;24&quot;,
        &quot;approval_status&quot;: &quot;A&quot;
    }]
   }" mimeType="application/json" doc:name="Set Payload"/>
       <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        <set-variable variableName="var1" value="#[message.payload]" doc:name="Variable"/>

        <set-payload value="{
    &quot;Second&quot;: [{
        &quot;projectid&quot;: &quot;15&quot;,
        &quot;total&quot;: &quot;123&quot;,
        &quot;updated&quot;: &quot;yes&quot;
    }, {
        &quot;projectid&quot;: &quot;24&quot;,
        &quot;total&quot;: &quot;123&quot;,
        &quot;updated&quot;: &quot;yes&quot;
    }]
  }" mimeType="application/json" doc:name="Set Payload"/>
        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        <set-variable variableName="var2" value="#[message.payload]" doc:name="Variable"/>

        <expression-transformer
     expression="#[[

     'Result':[
     {
      'projectid': flowVars.var1.first[0].projectid,
      'total': flowVars.var2.Second[0].total,
      'approval_status': flowVars.var1.first[0].approval_status
    },
    {
     'projectid': flowVars.var1.first[1].projectid,
     'total': flowVars.var2.Second[1].total,
     'approval_status': flowVars.var1.first[1].approval_status
   }

  ]]
      ]" doc:name="Expression"/>
  <json:object-to-json-transformer doc:name="Object to JSON"/>     

请注意,上面的示例只是为了展示如何动态快速组合有效负载。
在这里,您需要将有效负载都存储在流变量var1var2 ( )I have used set payload just to demonstrate, you need to get it dynamically,然后您可以使用表达式转换器动态构造有效负载
另请注意,如果您以完全相同的结构获取 json 有效负载,您可以使用上面的代码用于快速组合有效负载...
但是,如果您的 json 结构发生更改,表明您的有效负载中还包含一个列表元素,那么您需要修改上面的代码并使用 for 循环来获取值。

上面的代码将产生一个快速组合的有效载荷,如下所示:-

{
  "Result": [
    {
      "total": "123",
      "projectid": "15",
      "approval_status": "A"
    },
    {
      "total": "123",
      "projectid": "24",
      "approval_status": "A"
    }
  ]
}
于 2017-01-07T21:03:05.280 回答
-1

编辑答案现在它将根据您的 ID 动态过滤。

                        %dw 1.0
%output application/json
%var json1 = {"first": [{  "projectid": "15", "approval_status": "A"},{  "projectid": "24",  "approval_status": "A"}  ]}
%var json2 = { "Second": [{  "projectid": "15",  "total": "123",  "updated": "yes"},   {  "projectid": "24",  "total": "123",  "updated": "yes"}]}
---

Result: ( using(json2Group = json2.Second groupBy $.projectid) (json1.first  filter ( json2Group[$.projectid] != null)  map (( $  ++ json2Group[$.projectid][0]) ) distinctBy $  )    )

于 2017-01-07T20:47:12.960 回答