json 使用JOLT与两个数组进行内部连接,我想与两个对象具有相同id的数组进行连接,(下面的示例)

4uqofj5v  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(54)

我想用两个对象具有相同id的数组进行连接。(下面的例子)

{
  "body": {
    "array1": [
      {
        "id": "13910",
        "name": "A"
      }
    ],
    "array2": [
      {
        "id": "13910",
        "name": "B"
      }
    ]
  }
}

字符串
我尝试了这个Jolt规格,但我的输出是“空”

[
  {
    "operation": "shift",
    "spec": {
      "body": {
        "array1": {
          "*": {
            "id": {
              "@(2,body.array2[&1].id)": {
                "*": "result[&3].&1.&"
              }
            }
          }
        }
      }
    }
  }
]


关键是使用id作为键来选择两个数组中的所有对象,我相信这是一个内部连接,对吗?
我接受建议

xkrw2x1b

xkrw2x1b1#

不知道在这种情况下预期的输出是什么,但假设它是这样的:

{
  "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[#].&"
        }
      }
    }
  }
]

相关问题