jqで条件付き書式を使用する

jqで条件付き書式を使用する

フォローアップです。この問題数日前に私は尋ねました。

Webサーバーの出力があるとしましょう。

{"status":"OK","result":{"string1":{"variable":0},"string2":[{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX,"tier":"special","latitude":"01.XXXXX","longitude":"02.XXXXX"},{"id":"XXXXX:XXXXX","tier":"normal","latitude":"01.XXXXX","longitude":"02.XXXXX"}]}}

別の名前で保存response.jsonし、「」を出力として使用しますid。私は使用しますjq -r '.result.string2[].id' response.json

id今私の質問は、jqが " "ifだけを出力するように条件をどのように設定できますかtier:"special"

ありがとうございます!

これは試してみましたが、エラーのみが発生したいくつかのオプションです。

jq -r ' |.result.string2[].id.tier select(== "special") | .id ' responses.json

jq -r '.result.string2[].id | select( has("tier.special") )' responses.json

答え1

jq -r '.result.string2[] | select(.tier == "special").id' responses.json

.idまたは直接適用されるショートカットはありませんselect()

jq -r '.result.string2[] | select(.tier == "special") | .id' responses.json

配列を展開し、string2正しいtier値を持つ1つ以上の項目を選択してselect()からidを選択します。

式を1つずつ作成し、サンプル文書で複数回実行するだけです。最初に.result返された内容を確認してから.result.string2お待ちください。これにより、最初に|式を挿入しようとする試みが機能せず、含まれていない.result.string2[].idリストが生成されることがすぐにわかります(したがってそれをフィルタリングするためにtier使用することはできません)。select()tier

また、質問に示されているサンプル文書のいずれかの値の後に二重引用符がないことがわかります。

関連情報