如何根据路径值将对象数组转换为预期的 json 键值对象

How to convert array of object into expected json key value object based on the path value

这是我的示例输入 输入

[
  {
    "label": "test1",
    "value": 1,
    "path": "data/testData/testDataLevel3/testDataLevel3_1/0/testDataLevel3_1_a2"
  },
  {
    "label": "test2",
    "value": 2,
    "path": "data/testData/testDataLevel1/testDataLevel1_1"
  }
]

这个输入需要用jq这样转换

预期输出:

{
  "data": {
    "testData": {
      "testDataLevel1": { //object
        "testDataLevel1_1": 2
      },
      "testDataLevel3": {
        "testDataLevel3_1": [ //array
          {
            "testDataLevel3_1_a2": 1
          }
        ]
      }
    }
  }
}

路径会包含数组索引作为路径,有时key也会合并在路径中

您需要将每个.path转换成setpath可以理解的形式。剩下的就简单了。

reduce .[] as {$path, $value} (null;
  setpath($path / "/" | map(tonumber? // .); $value)
)

Online demo