请帮我得到下面的输出。
基于 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"
}
}
]
}
]
}
您可以通过按 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"
}
}
]
}
]
}