使用 jolt 将相似的 JSON 条消息合并为一条消息

Merge similar JSON messages into one using jolt

我正在努力实现的震撼转型需要一些帮助。主要是我需要保留 key_id 和 contacts 元素,然后将 contacts 中的所有元素分组到一个数组中。这将多个 JSON 消息合并为一批 json 组 我有这个输入

[
  {
    "key_id": "436",
    "contacts": [
      {
        "436": "aaaa-10f2-4cc3-820c-444444444",
        "1378": "2021-11-08",
        "1381": "2",
        "1421": "1"
      }
    ]
  },
  {
    "key_id": "436",
    "contacts": [
      {
        "436": "1111111111-e213-4c90-a8e8-6666gtggggf",
        "1378": "2021-11-09",
        "1381": "2",
        "1421": "1"
      }
    ]
  },
  {
    "key_id": "436",
    "contacts": [
      {
        "436": "xxxxxxxx-e213-4c90-a8e8-xxxxxxxxxxx",
        "1378": "2021-11-05",
        "1381": "2",
        "1421": "1"
      }
    ]
  }
]

并且想通过摇晃将它变成这样的东西


[
  {
    "key_id": "436",
    "contacts": [
      {
        "436": "aaaa-10f2-4cc3-820c-444444444",
        "1378": "2021-11-08",
        "1381": "2",
        "1421": "1"
      },
      {
        "436": "1111111111-e213-4c90-a8e8-6666gtggggf",
        "1378": "2021-11-09",
        "1381": "2",
        "1421": "1"
      },
      {
        "436": "xxxxxxxx-e213-4c90-a8e8-xxxxxxxxxxx",
        "1378": "2021-11-05",
        "1381": "2",
        "1421": "1"
      }
    ]
  }
]

我已经尝试了多种转换,但到目前为止还没有成功。提前致谢

您可以使用 shift 变换规范来组合 contacts 数组,同时保留 key_id 的所有相同元素,然后通过使用 基数 转换(例如

来选择最左边的 key_id
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[0].&",
        "contacts": {
          "*": "[0].&1"
        }
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "key_id": "ONE"
      }
    }
  }
]