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

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

我想对两个对象具有相同 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来选择两个数组中的所有对象,我相信这是一个内连接,对吧?

我接受建议

arrays json join inner-join jolt
1个回答
0
投票

不确定这种情况下的预期输出是什么,但假设是这样的:

{
  "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[#].&"
        }
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.