我想对两个对象具有相同 id 的数组进行连接。(下面的示例)
{
"body": {
"array1": [
{
"id": "13910",
"name": "A"
}
],
"array2": [
{
"id": "13910",
"name": "B"
}
]
}
}
我尝试了这个 Jolt 规范,但我的输出是“null”
[
{
"operation": "shift",
"spec": {
"body": {
"array1": {
"*": {
"id": {
"@(2,body.array2[&1].id)": {
"*": "result[&3].&1.&"
}
}
}
}
}
}
}
]
关键是用id作为key来选择两个数组中的所有对象,我相信这是一个内连接,对吧?
我接受建议
不确定这种情况下的预期输出是什么,但假设是这样的:
{
"result" : [ {
"id" : "13910",
"name" : [ "A", "B" ]
} ]
}
您可以尝试以下规格:
[
{
"operation": "shift",
"spec": {
"body": {
"array1": {
"*": {
"id": {
"@(3,array2[&1].id)": {
"@": "result[&3].&1",
"@(2,name)": "result[&3].name",
"@(4,array2[&2].name)": "result[&3].name"
}
}
}
}
}
}
}
]
如果您有许多字段要合并并且您想避免列出它们,您可以使用更通用的内容,但必须分两次转换来完成
[
{
"operation": "shift",
"spec": {
"body": {
"array1": {
"*": {
"id": {
"@(3,array2[&1].id)": {
"@(2,)": "result",
"@(4,array2[&2])": "result"
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"result": {
"0": {
"id": "result[#].id",
"*": "result[#].&"
},
"*": {
"id": null,
"*": "result[#].&"
}
}
}
}
]