gpt4 book ai didi

json - 在jq中按多个键对降序进行排序

转载 作者:行者123 更新时间:2023-12-04 00:52:11 26 4
gpt4 key购买 nike

我有以下数组:

[{
"name": "Object 1",
"prop1": 5,
"prop2": 2
}, {
"name": "Object 2",
"prop1": 6,
"prop2": 4
}, {
"name": "Object 3",
"prop1": 5,
"prop2": 3
}]


我想将此数组类似于此SQL ORDER BY prop1 DESC, prop2 ASC进行排序,因此得到以下结果:

[{
"name": "Object 2",
"prop1": 6,
"prop2": 4
}, {
"name": "Object 1",
"prop1": 5,
"prop2": 2
}, {
"name": "Object 3",
"prop1": 5,
"prop2": 3
}]


如何对数组进行排序:a)由键降序,b)由多个键降序?

版本:jq 1.5

最佳答案

在jq中,数组按其包含的元素的顺序进行排序。那是:

$ jq -n '[1, 2] < [1, 3], [1, 2] < [2, 1]'
true
true


sort_by过滤器对数组进行排序,将表达式作为参数,将对该数组的每个成员求值。例如,如果要按长度对单词列表进行排序:

$ jq -n '["prop", "leo", "column", "blast"] | sort_by(length)'
[
"leo",
"prop",
"blast",
"column"
]


如果作为参数赋给 sort_by的表达式返回多个值,则返回值将隐式包装在一个数组中,该数组将受上述数组排序规则的约束。例如,如果要按长度对单词列表进行排序,然后按字母顺序排序:

$ jq -n '["pro", "leo", "column", "ablast"] | sort_by(length, .)'
[
"leo",
"pro",
"ablast",
"column"
]


知道了这一点,并考虑到示例中的值是数字,您可以执行以下操作:

$ jq 'sort_by(-.prop1, .prop2)'

关于json - 在jq中按多个键对降序进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35540294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com