我有以下json:
[
{
"SG": [
{
"Id": "17",
"GroupName": "fistGN",
"Permissions": [
{
"Port": 80,
"Protocol": "tcp"
},
{
"Port": 8080,
"Protocol": "tcp"
},
{
"Port": 5080,
"Protocol": "tcp"
}
]
},
{
"Id": "1",
"GroupName": "secondGN",
"Permissions": [
{
"Port": 80,
"Protocol": "tcp"
},
{
"Port": 8080,
"Protocol": "tcp"
},
{
"Port": 5080,
"Protocol": "tcp"
}
]
}
]
}
]
是否可以使用单个命令通过权限端口sort_by GroupName然后为每个组?
这是我正在尝试做但但是没有按预期工作:
jq -s -S '.[].SG |= sort_by(.GroupName, .Permissions[].Port)' myfile.json
jq
解决方案:
jq '.[0].SG |= (map(.Permissions |= sort_by(.Port)) | sort_by(.GroupName))' myfile.json
(map(.Permissions |= sort_by(.Port)) | sort_by(.GroupName))
- 用于分隔2个排序操作的复合表达式:
map(.Permissions |= sort_by(.Port))
- 获取一个新数组,其中每个内部.Permissions
数组按键"Port"
值排序
sort_by(.GroupName)
- 按SG
键排序"GroupName"
数组项目输出:
[
{
"SG": [
{
"Id": "17",
"GroupName": "fistGN",
"Permissions": [
{
"Port": 80,
"Protocol": "tcp"
},
{
"Port": 5080,
"Protocol": "tcp"
},
{
"Port": 8080,
"Protocol": "tcp"
}
]
},
{
"Id": "1",
"GroupName": "secondGN",
"Permissions": [
{
"Port": 80,
"Protocol": "tcp"
},
{
"Port": 5080,
"Protocol": "tcp"
},
{
"Port": 8080,
"Protocol": "tcp"
}
]
}
]
}
]