Macos
在 jq 中使用條件格式
這是我幾天前提出的這個問題的後續行動。
假設我有來自網路伺服器的輸出
{"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
.現在我的問題是,我如何設置一個條件讓 jq 只會輸出我 "
id
“s iftier:"special"
?謝謝!
以下是我嘗試過的一些選項,但只有錯誤:
jq -r ' |.result.string2[].id.tier select(== "special") | .id ' responses.json jq -r '.result.string2[].id | select( has("tier.special") )' responses.json
jq -r '.result.string2[] | select(.tier == "special").id' responses.json
.id
或者,沒有直接應用的快捷方式select()
:jq -r '.result.string2[] | select(.tier == "special") | .id' responses.json
展開
string2
數組,挑選出具有正確值的條目或條目tier
withselect()
,然後從中挑選出id
。為此,您可以一點一點地建構表達式並在範例文件上執行幾次。首先
.result
查看返回的內容,然後.result.string2
等等。這樣,您會立即註意到您嘗試|
在表達式中放置 first 是行不通的,這.result.string2[].id
會導致列表不包含tier
(所以您不能使用select()
它來過濾tier
)。您還會注意到,您在問題中顯示的範例文件在其一個值之後缺少雙引號。