2016-02-21 58 views
8

我有以下陣列: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)使用多個鍵?

版本:1.5 JQ

回答

8

在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)'