在jq中使用条件格式

在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” 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数组,选出具有正确的tierwith值的一个或多个条目select(),然后选出id其中的 。

为此,您可以一点一点地构建表达式并在示例文档上运行多次。首先.result查看返回的内容,然后.result.string2等。这样,您会立即注意到您尝试|在表达式中放置第一个是行不通的,并且.result.string2[].id会产生一个不包含的列表tier(因此您不能使用select()它来过滤tier)。

您还会注意到,问题中显示的示例文档在其值之一后面缺少双引号。

相关内容