用jq重新格式化json输出



我的输入数据是这样的

{
"objects": [
{
"statistics": [
{
"dataType": 0,
"value": 0.0,
"id": 18
},
{
"dataType": 1,
"value": 0,
"id": 89
},
{
"dataType": 0,
"value": 35.0,
"id": 91
},
{
"dataType": 0,
"value": 33.0,
"id": 20
}
],
"key": "gate01"
},
{
"statistics": [
{
"dataType": 0,
"value": 1.0,
"id": 18
},
{
"dataType": 1,
"value": 24290.0,
"id": 89
},
{
"dataType": 0,
"value": 110.0,
"id": 91
},
{
"dataType": 0,
"value": 97.0,
"id": 20
}
],
"key": "gate02"
}
]
}

我想这样格式化

{
"gate01": {
"18": 0.0,
"89": 0.0,
"91": 35.0,
"20": 33.0
},
"gate02": {
"18": 1.0,
"89": 24290.0,
"91": 110.0,
"20": 97.0
}
}

我尝试过这个,但它不工作,我卡住了

| jq '.objects[] | {(.key): {(.statistics[].id|tostring): .statistics[].value}}'

你已经接近了,你应该像这样只展开一次.statistics:

.objects | map({(.key): (.statistics | map({(.id | tostring): .value}) | add)}) | add
<<p><一口>在线演示/一口>

这应该达到您的期望:

jq '.objects |
map({key, value: (.statistics | 
map({value, key:.id|tostring}) |
from_entries)
}) |
from_entries' input.json

最新更新