Macos

在 jq 中使用條件格式

  • April 3, 2022

這是我幾天前提出的這個問題的後續行動。

假設我有來自網路伺服器的輸出

{"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 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
jq -r '.result.string2[] | select(.tier == "special").id' responses.json

.id或者,沒有直接應用的快捷方式select()

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

展開string2數組,挑選出具有正確值的條目或條目tierwith select(),然後從中挑選出id

為此,您可以一點一點地建構表達式並在範例文件上執行幾次。首先.result查看返回的內容,然後.result.string2等等。這樣,您會立即註意到您嘗試|在表達式中放置 first 是行不通的,這.result.string2[].id會導致列表不包含tier(所以您不能使用select()它來過濾tier)。

您還會注意到,您在問題中顯示的範例文件在其一個值之後缺少雙引號。

引用自:https://unix.stackexchange.com/questions/697830