我正在访问一个API,它返回JSON和如下所示的嵌套对象:
{
"9273": {
"status": "ok",
"tag": "group-8",
"name": "London"
},
"4029": {
"status": "unknown",
"tag": "group-12",
"name": "Tokyo"
},
"6322": {
"status": "ok",
"tag": "group-12",
"name": "Singapore"
},
"1038": {
"status": "unknown",
"tag": "group-19",
"name": "Melbourne"
},
"2938": {
"status": "ok",
"tag": "group-12",
"name": "New York"
}
}我试图在Bash脚本中使用jq、regex、sed等解析JSON,根据status (ok)和tag (最高组使用'ok')对其进行过滤,并对匹配的对象进行扁平化,以获得其name的多行排序字符串值和静态前缀(例如,城市)。
所需输出如下:
City: New York
City: Singapore如果能帮助我解决这个问题,我将不胜感激。
发布于 2020-03-27 10:26:59
使用您的数据,并使用-r命令行选项,以下程序生成如下所示的输出:
[.[]]
| map(select(.status == "ok"))
| (max_by( .tag | sub("group-";"") | tonumber) | .tag) as $mx
| .[]
| select(.tag==$mx)
| "City: \(.name)"输出:
City: Singapore
City: New York如果您希望城市按字母顺序列出,则可以将适当的sort_by过滤器添加到jq管道。
https://stackoverflow.com/questions/60878877
复制相似问题