合并两个 JSON 文件,同时求和值
Merging two JSON files while summing up values
我得到两个包含股票信息的不同文件,我想在根据“pid”对数据求和的同时合并到一个文件中。
有效载荷A
{
"order": [
{
"pid": "a",
"instock": "2"
},
{
"pid": "b",
"instock": "2"
},
{
"pid": "c",
"instock": "2"
}
]
}
有效载荷B
{
"order": [
{
"pid": "c",
"instock": "2"
},
{
"pid": "d",
"instock": "2"
}
]
}
结果
有效载荷A
{
"order": [
{
"pid": "a",
"instock": "2"
},
{
"pid": "b",
"instock": "2"
},
{
"pid": "c",
"instock": "4"
},
{
"pid": "c",
"instock": "2"
}
]
}
但我正在努力解决的是边缘情况:
- pids 可能在两个数据集中,也可能只在一个数据集中
- payloadB 可能为空
{
"order": []
}
您可以试试下面的DataWeave表达式:
%dw 2.0
output application/json
import * from dw::core::Arrays
var payloadA = {
"order": [
{
"pid": "a",
"instock": "2"
},
{
"pid": "b",
"instock": "2"
},
{
"pid": "c",
"instock": "2"
}
]
}
var payloadB = {
"order": [
{
"pid": "c",
"instock": "2"
},
{
"pid": "d",
"instock": "2"
}
]
}
---
"order": outerJoin(payloadA.order, payloadB.order, (itemA) -> itemA.pid, (itemB) -> itemB.pid) map (item, index) -> {
"pid": item.l.pid default item.r.pid,
"instock": (item.l.instock default 0) + (item.r.instock default 0)
}
输出:
{
"order": [
{
"pid": "a",
"instock": 2
},
{
"pid": "b",
"instock": 2
},
{
"pid": "c",
"instock": 4
},
{
"pid": "d",
"instock": 2
}
]
}
我得到两个包含股票信息的不同文件,我想在根据“pid”对数据求和的同时合并到一个文件中。
有效载荷A
{
"order": [
{
"pid": "a",
"instock": "2"
},
{
"pid": "b",
"instock": "2"
},
{
"pid": "c",
"instock": "2"
}
]
}
有效载荷B
{
"order": [
{
"pid": "c",
"instock": "2"
},
{
"pid": "d",
"instock": "2"
}
]
}
结果 有效载荷A
{
"order": [
{
"pid": "a",
"instock": "2"
},
{
"pid": "b",
"instock": "2"
},
{
"pid": "c",
"instock": "4"
},
{
"pid": "c",
"instock": "2"
}
]
}
但我正在努力解决的是边缘情况:
- pids 可能在两个数据集中,也可能只在一个数据集中
- payloadB 可能为空
{
"order": []
}
您可以试试下面的DataWeave表达式:
%dw 2.0
output application/json
import * from dw::core::Arrays
var payloadA = {
"order": [
{
"pid": "a",
"instock": "2"
},
{
"pid": "b",
"instock": "2"
},
{
"pid": "c",
"instock": "2"
}
]
}
var payloadB = {
"order": [
{
"pid": "c",
"instock": "2"
},
{
"pid": "d",
"instock": "2"
}
]
}
---
"order": outerJoin(payloadA.order, payloadB.order, (itemA) -> itemA.pid, (itemB) -> itemB.pid) map (item, index) -> {
"pid": item.l.pid default item.r.pid,
"instock": (item.l.instock default 0) + (item.r.instock default 0)
}
输出:
{
"order": [
{
"pid": "a",
"instock": 2
},
{
"pid": "b",
"instock": 2
},
{
"pid": "c",
"instock": 4
},
{
"pid": "d",
"instock": 2
}
]
}