按jq中的多个键降序排序

时间:2016-02-21 18:41:28

标签: json sorting 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

1 个答案:

答案 0 :(得分:12)

在jq中,数组按顺序排序它们包含的元素。那就是:

_db.Users.Select(u=>u.Roles.Select(r=>r.Role.Name))

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

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

如果赋予$ 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"
]