json - 在 Bash 中解析 Json 嵌套对象
问题描述
我正在访问一个返回带有嵌套对象的 JSON 的 API,如下所示:
{
"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
,等解析 JSON regex
,在(ok) 和(最高组带有 'ok') 上对其进行过滤,然后展平匹配的对象以获得多行排序的字符串值他们连同一个静态前缀(例如城市)。sed
status
tag
name
所需的输出如下:
City: New York
City: Singapore
我将不胜感激任何帮助解决这个问题。
解决方案
使用您的数据并使用 -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 管道。
推荐阅读
- php - codeigniter 个人资料页面编辑
- random - LibGDX 对 MathUtils.random() 的内部调用会干扰生成的随机数序列
- typescript - `race` 函数会引发 Typescript 异常,即使它运行良好
- centos - libtcl8.4.so 和 libtk8.4.so 丢失
- c# - C# 套接字创建错误
- wpf - C# communicating with Arduino COM access denied
- javascript - 角递归组件防止共享属性
- c - 比较两个文件的常见和单个数字
- flutter - 有谁知道如何在颤动中发出http请求?
- javascript - 在 C# ASP.Net 应用程序中使用 JavaScript 淡入和淡出(闪烁)文本