首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Bash中的Json嵌套对象

解析Bash中的Json嵌套对象
EN

Stack Overflow用户
提问于 2020-03-27 09:53:45
回答 1查看 396关注 0票数 0

我正在访问一个API,它返回JSON和如下所示的嵌套对象:

代码语言:javascript
复制
{
  "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脚本中使用jqregexsed等解析JSON,根据status (ok)和tag (最高组使用'ok')对其进行过滤,并对匹配的对象进行扁平化,以获得其name的多行排序字符串值和静态前缀(例如,城市)。

所需输出如下:

代码语言:javascript
复制
City: New York
City: Singapore

如果能帮助我解决这个问题,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-27 10:26:59

使用您的数据,并使用-r命令行选项,以下程序生成如下所示的输出:

代码语言:javascript
复制
[.[]]
| map(select(.status == "ok"))
| (max_by( .tag | sub("group-";"") | tonumber) | .tag) as $mx
| .[]
| select(.tag==$mx)
| "City: \(.name)"

输出:

代码语言:javascript
复制
City: Singapore
City: New York

如果您希望城市按字母顺序列出,则可以将适当的sort_by过滤器添加到jq管道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60878877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档