jq-如何格式化键和值对,然后在json中迭代键
请帮帮我,伙计们。 我有以下资料:jq-如何格式化键和值对,然后在json中迭代键,json,linux,jq,Json,Linux,Jq,请帮帮我,伙计们。 我有以下资料: { "id": 88888, "name": "TESTING", "online": 1, "test_list": [ { "id": 0, "type": 34, "name": "Blabla", &qu
{
"id": 88888,
"name": "TESTING",
"online": 1,
"test_list": [
{
"id": 0,
"type": 34,
"name": "Blabla",
"used": 9870,
"rate": 31768897891,
"temp": 0,
"percent": 100,
"enabled": 0,
"reset": 0,
"temp": 2
},
{
"id": 1,
"type": 23,
"name": "AlbAlb",
"used": 0865,
"rate": 317681675432345678951,
"temp": 1,
"percent": 99,
"enabled": 0,
"reset": 0,
"target": 2
},
{
"id": 2,
"type": 98,
"name": "TztS",
"used": 65,
"rate": 6324,
"temp": 0,
"percent": 80,
"enabled": 0,
"reset": 0,
"target": 2
}
],
"info": {
"version": "1.0",
"no": "123",
"sw": "321",
"version_detail": {
"date": "2021-03-30",
"build": "11",
"cot": "dfgdfgd"
}
}
}
[
{
"name": "TESTING",
"online": 1
},
{
"id0": 0,
"type0": 34,
"name0": "Blabla",
"rate0": 31768897891,
"temp0": 0,
"percent0": 100
"id1": 1,
"type1": 23,
"name1": "AlbAlb",
"rate1": 317681675432345670000,
"temp1": 1,
"percent1": 99
"id2": 2,
"type2": 98,
"name2": "TztS",
"rate2": 6324,
"temp2": 0,
"percent2": 80
}
]
我需要做以下工作:
{
"id": 88888,
"name": "TESTING",
"online": 1,
"test_list": [
{
"id": 0,
"type": 34,
"name": "Blabla",
"used": 9870,
"rate": 31768897891,
"temp": 0,
"percent": 100,
"enabled": 0,
"reset": 0,
"temp": 2
},
{
"id": 1,
"type": 23,
"name": "AlbAlb",
"used": 0865,
"rate": 317681675432345678951,
"temp": 1,
"percent": 99,
"enabled": 0,
"reset": 0,
"target": 2
},
{
"id": 2,
"type": 98,
"name": "TztS",
"used": 65,
"rate": 6324,
"temp": 0,
"percent": 80,
"enabled": 0,
"reset": 0,
"target": 2
}
],
"info": {
"version": "1.0",
"no": "123",
"sw": "321",
"version_detail": {
"date": "2021-03-30",
"build": "11",
"cot": "dfgdfgd"
}
}
}
[
{
"name": "TESTING",
"online": 1
},
{
"id0": 0,
"type0": 34,
"name0": "Blabla",
"rate0": 31768897891,
"temp0": 0,
"percent0": 100
"id1": 1,
"type1": 23,
"name1": "AlbAlb",
"rate1": 317681675432345670000,
"temp1": 1,
"percent1": 99
"id2": 2,
"type2": 98,
"name2": "TztS",
"rate2": 6324,
"temp2": 0,
"percent2": 80
}
]
我想将我需要的信息连接到块中,然后通过id或迭代设置密钥编号。
使用jq和man在同一条线上,是否有可能以某种方式实现这一点
经过很长一段时间,我只做到了以下几点:
{
"id": 88888,
"name": "TESTING",
"online": 1,
"test_list": [
{
"id": 0,
"type": 34,
"name": "Blabla",
"used": 9870,
"rate": 31768897891,
"temp": 0,
"percent": 100,
"enabled": 0,
"reset": 0,
"temp": 2
},
{
"id": 1,
"type": 23,
"name": "AlbAlb",
"used": 0865,
"rate": 317681675432345678951,
"temp": 1,
"percent": 99,
"enabled": 0,
"reset": 0,
"target": 2
},
{
"id": 2,
"type": 98,
"name": "TztS",
"used": 65,
"rate": 6324,
"temp": 0,
"percent": 80,
"enabled": 0,
"reset": 0,
"target": 2
}
],
"info": {
"version": "1.0",
"no": "123",
"sw": "321",
"version_detail": {
"date": "2021-03-30",
"build": "11",
"cot": "dfgdfgd"
}
}
}
[
{
"name": "TESTING",
"online": 1
},
{
"id0": 0,
"type0": 34,
"name0": "Blabla",
"rate0": 31768897891,
"temp0": 0,
"percent0": 100
"id1": 1,
"type1": 23,
"name1": "AlbAlb",
"rate1": 317681675432345670000,
"temp1": 1,
"percent1": 99
"id2": 2,
"type2": 98,
"name2": "TztS",
"rate2": 6324,
"temp2": 0,
"percent2": 80
}
]
jq'[.|{name,online}]+[.test|list[]{id,type,name,rate,temp,percent}}带有_条目(.key |=.+“0”)]
我尝试使用map工具,但它不起作用=((请帮助…关键是
带有_条目
。一种可能是使用减少
:
[ {name, online},
(.test_list
| . as $in
| reduce range(0; length) as $i ({}; . + ($in[$i] | with_entries(.key = "\(.key)\($i)")))
)
]
请注意,您的示例输出与JSON不太正确,而且对于您的示例输入,上面的jq程序产生的结果略有不同,但是如果您想删除某些键值对,您可以轻松地这样做,例如,作为管道中的一个初步步骤。这里有一个无reduce的方法:它使用
和\u条目
在数组上执行计数:
[ {name, online},
(.test_list
| with_entries(.key |= tostring
| .key as $k
| .value |= with_entries(.key += $k))
| add
)
]
非常感谢!它真的很有效!您的第二个选项比第一个选项对我来说更清楚。)我敢缩短最终输出格式,并在您的版本中添加一点值对过滤器。Thanx,bro=)我仍然是json的高手,所以你的解决方案对我帮助很大,我将继续学习!这对我来说是一个完美的解决方案:{name,online}+([.test_list[]{id,type,name,rate,temp,percent}])带有_项(.key |=tostring |。key为$k |。value |=(带有_项(.key |=。+$k)))非常感谢!@breed_o_o-我很好奇,你找到了两个
的解决方案,其中包含
条目,更加清晰。另一方面,我想知道,如果你在这里重命名密钥,是否真的是实现你最终要做的事情的最佳方法……我可用的默认值由ap提供i、 所以我不能删除不需要的密钥。为了在jq之后过滤密钥,我必须执行许多不必要的操作,因为这些数据会立即加载到记帐系统=)