【问题标题】:how to merge two Json based on key value in Mule如何根据Mule中的键值合并两个Json
【发布时间】:2017-05-22 09:35:07
【问题描述】:

您好,我有一个 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"
}]}

【问题讨论】:

    标签: json mule mule-studio dataweave cloudhub


    【解决方案1】:

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

    但是,如果您能够获取有效负载并能够保存到 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"/>     
    

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

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

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

    【讨论】:

    • 我一个一个地获取有效载荷并存储在一个变量中。它们的有效载荷结构将包含更多数量的数据,并且两者的顺序不同
    • 你需要修改上面的代码,需要使用一个foreach和String缓冲区来存储每个值并在最后打印组合值。上述解决方案是根据您提到的数据进行快速组合:)
    • 你能建议我在dataweave中使用过滤器吗
    【解决方案2】:

    编辑的答案 现在它将根据您的 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 $  )    )

    【讨论】:

    • 输入输出需要根据key进行映射,是动态的。
    • 我已经编辑了我的回复...你可以试试。它现在将采用动态 Id 并根据它们进行过滤
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多