2016-11-09 14 views
0

JQ照会の結果に問題があります。元のJSONは次のようになります。argsでjqを照会

[ 
    { 
    "read": false, 
    "mex": "message 1", 
    "id": 1000 
    }, 
    { 
    "read": false, 
    "mex": "message 2", 
    "id": 2000 
    }, 
    { 
    "read": false, 
    "mex": "message 3", 
    "id": 3000 
    } 

]

私は、これらが正確であることを、私に(例えば)ID 2000を持つレコードの結果を与えるクエリをしたいと思います。

次のクエリでは
{ 
    "read": false, 
    "mex": "message 2", 
    "id": 2000 
} 

は空白のレコード( "[]")

jq "map(select(.read==false))" file.json| jq -r 'map(select(.id==$foo))' --arg foo 2000 

答えて

2

種類がwが一致しないを出力しますなぜそれが選択されていないのですか? idフィールドはすべて数字ですが、文字列と比較しています。 --argは、パラメータを文字列として読み取ります。数字や文字列として扱いたいと思うでしょう。ちょうど--argjsonを使用してJSONなどのパラメータを読みやすくなります:

$ jq -r --argjson id 2000 'map(select((.read | not) and .id == $id))' file.json 
0

ここ.ID 2000

.[] 
| if .id == 2000 then . else empty end 
でオブジェクトを選択するために、単純なフィルタです