这是来自的后续问题这个问题这是由另一个人贡献的。我有来自网络服务器的以下输出:
{
"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
我现在正在提取 ids并将它们作为responses.json
文件保存;这工作得很好。
但是,我的问题是,如何设置条件,以便 jq 只向我输出id
's if tier: "special"
?我尝试用以下方法解决它回答在此线程中,为这两个别名:
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 shell 那样将它们保留在单引号内。
jq -r '.result.string2[] | select(.tier == \"special\") | .id'