フォローアップです。この問題数日前に私は尋ねました。
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
また、質問に示されているサンプル文書のいずれかの値の後に二重引用符がないことがわかります。