2016-02-21 50 views
8

を降順:JQは、ソート、私は次の配列持つ複数のキーによって

:私はこの結果を持っている "PROP1 DESC BY ORDER PROP2のASC" 私はこのSQLに類似したこの配列をソートしたい

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

[{ 
    "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

答えて

8

、そこに含まれる要素のソートすることによって配列のソートJQ、ためです。すなわち:

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

sort_byフィルタは、アレイの各メンバーのために評価される引数として表現を取って、配列をソート。たとえば、長さの単語のリストをソートしたい場合:

は引数として sort_byに与えられた式が複数の値を返す場合、戻り値は暗黙的に、配列にラップされます
$ jq -n '["prop", "leo", "column", "blast"] | sort_by(length)' 
[ 
    "leo", 
    "prop", 
    "blast", 
    "column" 
] 

になります上記で列挙した配列のソート規則に従う。あなたは長さによって単語のリストをソートしたい、その後、アルファベット順たとえば、:

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

はこのことを知って、そしてあなたの例では値が数値であることを考慮に入れて、あなただけの次の操作を実行できます。

$ jq 'sort_by(-.prop1, .prop2)' 
関連する問題