我有一个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"
}
}
]
}
到目前为止,我已经尝试了多种方法使用to_entries和jq中的map函数来创建输出变量jq 'to_entries | map(.value[]| . += {"key_v" : (.key)} )' input.json > output.json
中的内容,这是我最接近的解决方案。
- 提取键并添加到对象的键值对中
- 使用map(select())来按键分组,但我在这两个步骤中都得到了错误,例如不能用字符串名称或字符串值索引数组。
3条答案
按热度按时间0sgqnhkj1#
它不会赢得选美比赛,但它的工作:
通过对
with_entries
的单个调用:输出量:
uelo1irk2#
如果使用以下面向流的“聚结”函数,则容易获得简单的解:
现在的解决方案很简单:
wvt8vs2t3#
这会产生预期的结果: