使用 jolt 从嵌套 JSON 创建更简单的 JSON 对象数组

Create array of simpler JSON objects from a nested JSON using jolt

我的输入JSON就像

{
  "common": {
    "name": "abc"
  },
  "details": {
    "id": 4,
    "node": [
      {
        "name": "node1",
        "array2": []
      },
      {
        "name": "node2",
        "array2": [
          {
            "name": "node2_a2_1"
          }
        ]
      },
      {
        "name": "node3",
        "array2": [
          {
            "name": "node3_a2_1"
          },
          {
            "name": "node3_a2_2"
          },
          {
            "name": "node3_a2_3"
          }
        ]
      }
    ]
  }
}

我想要的是 array2 中的每个叶节点(例如 {"name": "node3_a2_1"})我将遍历根并添加所有公共项目并创建一个 JSON 对象数组,没有任何嵌套对象。所以,我想要的输出是

[
  {
    "common_name": "abc",
    "id": 4,
    "node_name": "node2",
    "name": "node2_a2_1"
  },
  {
    "common_name": "abc",
    "id": 4,
    "node_name": "node3",
    "name": "node3_a2_1"
  },
  {
    "common_name": "abc",
    "id": 4,
    "node_name": "node3",
    "name": "node3_a2_2"
  },
  {
    "common_name": "abc",
    "id": 4,
    "node_name": "node3",
    "name": "node3_a2_3"
  }
]

你能建议我该怎么做吗?

您可以遍历 array2,同时从每个元素在 JSON 值中的原始位置选取值。

例如;使用@(4,id)遍历四次}获取id的值,并使用@(3,name)[&1]作为

等各个属性的公共区分标识
[
  {
    "operation": "shift",
    "spec": {
      "details": {
        "node": {
          "*": {
            "array2": {
              "*": {
                "@(5,common.name)": "@(3,name)[&1].common_name",
                "@(4,id)": "@(3,name)[&1].id",
                "@(2,name)": "@(3,name)[&1].node_name",
                "name": "@(3,name)[&1].&"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": ""
      }
    }
  }
]