JQ 按具有相同嵌套 json 对象的不同根排序
JQ sort-by different root with identical nested json object
我想使用 JQ 通过查看 .fff.ggg.hhh.iii
-属性.
中的值来对每个 ddd
-json 数组进行排序
例如看这个 json:
{
"aaa-1": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "100"}}}},
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
{"fff": {"ggg": {"hhh": {"iii": "10"}}}}
]
},
"aaa-2": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "1000"}}}},
{"fff": {"ggg": {"hhh": {"iii": "333"}}}}
]
},
"aaa-3": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "77"}}}},
{"fff": {"ggg": {"hhh": {"iii": "88"}}}},
{"fff": {"ggg": {"hhh": {"iii": "5555"}}}},
{"fff": {"ggg": {"hhh": {"iii": "1"}}}}
]
}
...
"aaa-n": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "989898"}}}},
...
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
]
}
}
我想要的结果应该是这样的:
{
"aaa-1": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
{"fff": {"ggg": {"hhh": {"iii": "10"}}}}
{"fff": {"ggg": {"hhh": {"iii": "100"}}}}
]
},
"aaa-2": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "333"}}}},
{"fff": {"ggg": {"hhh": {"iii": "1000"}}}}
]
},
"aaa-3": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
{"fff": {"ggg": {"hhh": {"iii": "77"}}}},
{"fff": {"ggg": {"hhh": {"iii": "88"}}}},
{"fff": {"ggg": {"hhh": {"iii": "5555"}}}}
]
}
...
"aaa-n": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "4"}}}},
...
{"fff": {"ggg": {"hhh": {"iii": "989898"}}}}
]
}
}
我尝试了这些答案的各种组合和变体,但我无法想出解决方案:
我希望我至少能以有意义的方式描述问题。
有人可以帮助我吗?
使用 sort_by
更新 |=
每个字段的数组,并使用 tonumber
转换为数字:
jq '.[].ddd |= sort_by(.fff.ggg.hhh.iii | tonumber)'
{
"aaa-1": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"1"}}}},
{"fff":{"ggg":{"hhh":{"iii":"10"}}}},
{"fff":{"ggg":{"hhh":{"iii":"100"}}}}
]
},
"aaa-2": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"333"}}}},
{"fff":{"ggg":{"hhh":{"iii":"1000"}}}}
]
},
"aaa-3": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"1"}}}},
{"fff":{"ggg":{"hhh":{"iii":"77"}}}},
{"fff":{"ggg":{"hhh":{"iii":"88"}}}},
{"fff":{"ggg":{"hhh":{"iii":"5555"}}}}
]
},
"aaa-n": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"1"}}}},
{"fff":{"ggg":{"hhh":{"iii":"989898"}}}}
]
}
}
我想使用 JQ 通过查看 .fff.ggg.hhh.iii
-属性.
ddd
-json 数组进行排序
例如看这个 json:
{
"aaa-1": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "100"}}}},
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
{"fff": {"ggg": {"hhh": {"iii": "10"}}}}
]
},
"aaa-2": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "1000"}}}},
{"fff": {"ggg": {"hhh": {"iii": "333"}}}}
]
},
"aaa-3": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "77"}}}},
{"fff": {"ggg": {"hhh": {"iii": "88"}}}},
{"fff": {"ggg": {"hhh": {"iii": "5555"}}}},
{"fff": {"ggg": {"hhh": {"iii": "1"}}}}
]
}
...
"aaa-n": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "989898"}}}},
...
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
]
}
}
我想要的结果应该是这样的:
{
"aaa-1": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
{"fff": {"ggg": {"hhh": {"iii": "10"}}}}
{"fff": {"ggg": {"hhh": {"iii": "100"}}}}
]
},
"aaa-2": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "333"}}}},
{"fff": {"ggg": {"hhh": {"iii": "1000"}}}}
]
},
"aaa-3": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "1"}}}},
{"fff": {"ggg": {"hhh": {"iii": "77"}}}},
{"fff": {"ggg": {"hhh": {"iii": "88"}}}},
{"fff": {"ggg": {"hhh": {"iii": "5555"}}}}
]
}
...
"aaa-n": {
"ddd": [
{"fff": {"ggg": {"hhh": {"iii": "4"}}}},
...
{"fff": {"ggg": {"hhh": {"iii": "989898"}}}}
]
}
}
我尝试了这些答案的各种组合和变体,但我无法想出解决方案:
我希望我至少能以有意义的方式描述问题。
有人可以帮助我吗?
使用 sort_by
更新 |=
每个字段的数组,并使用 tonumber
转换为数字:
jq '.[].ddd |= sort_by(.fff.ggg.hhh.iii | tonumber)'
{
"aaa-1": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"1"}}}},
{"fff":{"ggg":{"hhh":{"iii":"10"}}}},
{"fff":{"ggg":{"hhh":{"iii":"100"}}}}
]
},
"aaa-2": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"333"}}}},
{"fff":{"ggg":{"hhh":{"iii":"1000"}}}}
]
},
"aaa-3": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"1"}}}},
{"fff":{"ggg":{"hhh":{"iii":"77"}}}},
{"fff":{"ggg":{"hhh":{"iii":"88"}}}},
{"fff":{"ggg":{"hhh":{"iii":"5555"}}}}
]
},
"aaa-n": {
"ddd": [
{"fff":{"ggg":{"hhh":{"iii":"1"}}}},
{"fff":{"ggg":{"hhh":{"iii":"989898"}}}}
]
}
}