如何根据路径值将对象数组转换为预期的 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)
)
这是我的示例输入 输入
[
{
"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)
)