我有一个格式为 json 的文件
{
"hello": [
{
"name": "var1",
"value": "1234"
},
{
"name": "var2",
"value": "2356"
},
{
"name": "var3",
"value": "2356"
}
],
"hi": [
{
"name": "var1",
"value": "3412"
},
{
"name": "var2",
"value": "2563"
},
{
"name": "var3",
"value": "4256"
}
],
"bye": [
{
"name": "var1",
"value": "1294"
},
{
"name": "var2",
"value": "8356"
},
{
"name": "var3",
"value": "5356"
}
]
}
我想把这个对象转换成这种格式
{
"output": [
{
"var1": {
"hello": "1234",
"hi": "3412",
"bye": "1294"
}
},
{
"var2": {
"hello": "2356",
"hi": "2563",
"bye": "8356"
}
},
{
"var3": {
"hello": "2356",
"hi": "4256",
"bye": "5356"
}
}
]
}
到目前为止,我已经尝试了多种方法,使用 jq 中的 to_entries 和 map 函数来创建输出变量内的内容
jq 'to_entries | map(.value[]| . += {"key_v" : (.key)} )' input.json > output.json
这是我最接近的解决方案
如果使用以下面向流的“合并”函数,则很容易获得简单的解决方案:
def coalesce(s):
reduce s as $obj ({};
. as $in
| $obj
| to_entries[0]
| .key as $k
| .value as $v
| $in
| .[$k] += $v);
现在的解决方案很简单:
coalesce(to_entries[]
| .key as $key
| .value[]
| {(.name): {($key): .value}})
| {output: [.]}