これはあなたのフォローアップの質問です。この問題これは他の人が貢献したものです。 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"
}
]
}
}
jq -r '.result.string2[].id' responses.json
現在、IDを抽出してresponses.json
ファイルとして保存しています。
id
しかし、私の質問では、jqがifのみを出力するように条件をどのように設定しますかtier: "special"
?です。次の方法で解決しようとしました。回答このスレッドでは、次の2つのエイリアスがあります。
jq -r '.result.string2[] | select(.tier == "special") | .id'responses.json
jq -r '.result.string2[] | select(.tier == "special") | .id' responses.json
私のWindows-PowerShellでは動作しないようです。次のエラーメッセージが表示されます。
jq: error: special/0 is not defined at <top-level>, line 1:
.result.string2[] | select(.tier == special) | .id jq: 1 compile error
答えてくれてありがとう!
ベストアンサー1
二重引用符をエスケープする必要があります。おそらくpowershellは、POSIXシェルのように一重引用符の中に二重引用符を保持しないからです。
jq -r '.result.string2[] | select(.tier == \"special\") | .id'