首页 > 解决方案 > 如何根据路径值将对象数组转换为预期的 json 键值对象

问题描述

这是我的示例输入输入

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

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

标签: jsonpathjq

解决方案


你需要把每一个转换成一个可以理解.path的形式。setpath其余的很简单。

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

在线演示


推荐阅读