根据条件合并 JSONs

问题描述 投票:0回答:1

请帮我得到下面的输出。

基于 Input1 和 Input2 我得到了输出。如果 Id 匹配,那么我需要有 PATCH 方法,如果不匹配,那么我需要有 POST 方法。

如果 ID(“ID”:“123456”)在 input1 中不存在,那么它是 POST,否则它是 PATCH。

**输入1:**

{
  "prod": [
    {
      "Id": "123456",
      "value": "ABC"
    },
    {
      "Id": "123456",
      "value": "DEF"
    }
  ]
}

输入2:

{
  "ProdInfo": {
    "Prod": [
      {
        "Id": "123456",
        "value": "LMN"
      },
      {
        "Id": "123456",
        "value": "OPQ"
      },
      {
        "Id": "654321",
        "value": "OPQ"
      }
    ]
  }
} 

输出:

{
  "output": [
    {
      "Request": [
        {
          "method": "PATCH",
          "body": {
            "ID": "123456",
            "Value": "ABC;DEF;LMN;OPQ"
          }
        },
        {
          "method": "POST",
          "body": {
            "ID": "654321",
            "Value": "OPQ"
          }
        }
      ]
    }
  ]
}
mule dataweave mulesoft
1个回答
0
投票

您可以通过按 id 分组来解决这个问题,然后使用 pluck() 以可以映射到所需输出的方式获取键值。我添加了一个函数来封装一些内部复杂性。

%dw 2.0
output application/json
var input1={
  "prod": [
    {
      "Id": "123456",
      "value": "ABC"
    },
    {
      "Id": "123456",
      "value": "DEF"
    }
  ]
}.prod groupBy ($.Id)

fun joinValues(a)=a.*value joinBy  ";"
---
{
    "output": [
        {
            Request: 
                payload.ProdInfo.Prod 
                    groupBy ($.Id)
                    pluck ((value, key, index) -> {
                        method: if (namesOf(input1) contains (key as String)) "PATCH" else "POST",
                        body: {
                            ID: key,
                            Value: joinValues((input1[key as String] default []) ++ value)
                        }
                            
                            
                    })
        }
    ]
}

输入载荷(等于input2)

{
  "ProdInfo": {
    "Prod": [
      {
        "Id": "123456",
        "value": "LMN"
      },
      {
        "Id": "123456",
        "value": "OPQ"
      },
      {
        "Id": "654321",
        "value": "OPQ"
      }
    ]
  }
}

输出:

{
  "output": [
    {
      "Request": [
        {
          "method": "PATCH",
          "body": {
            "ID": "123456",
            "Value": "ABC;DEF;LMN;OPQ"
          }
        },
        {
          "method": "POST",
          "body": {
            "ID": "654321",
            "Value": "OPQ"
          }
        }
      ]
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.