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

罗兰·韦斯勒德

我有以下数组:

[{
    "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_byas参数的表达式返回多个值,则返回值将隐式包装在一个数组中,该数组将受上述数组排序规则的约束。例如,如果要按长度对单词列表进行排序,然后按字母顺序排序:

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章