首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在BASH中读取和循环JSON文件

在BASH中读取和循环JSON文件
EN

Stack Overflow用户
提问于 2018-08-21 14:49:28
回答 2查看 1K关注 0票数 1

我有一个名为department_groups.json的JSON文件(见下文)。

本质上,如果我给出一个commercial的参数,我希望它能返回:

代码语言:javascript
复制
commercial-team@domain.com

commercial-updates@domain.com

有人能指导/帮助我做到这一点吗?

代码语言:javascript
复制
{
    "legal": {
        "google_groups":[
            ["Legal", "legal@domain.com"],
            ["Legal Team", "legal-team@domain.com"],
            ["Compliance Checks", "compliance@domain.com"]
        ],
        "samba_groups": ""
     },
    "commercial":{
        "google_groups":[
            ["Commercial Team", "commercial-team@domain.com"],
            ["Commercial Updates", "commercial-updates@domain.com"]
        ],
        "samba_groups": ""  
    },
    "technology":{
        "google_groups":[
            ["Technology", "technology@domain.com"],
            ["Incidents", "incidents@domain.com"]
        ],
        "samba_groups": ""
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-21 15:10:41

这将返回commercial属性的google_groups属性中每个数组中的第二个元素:

代码语言:javascript
复制
jq --arg key commercial '.[$key].google_groups | .[] | .[1]' file

使用jq -r以“原始”格式输出(去掉双引号)。

代码语言:javascript
复制
$ key=commercial
$ jq -r --arg key "$key" '.[$key].google_groups | .[] | .[1]' file
commercial-team@domain.com
commercial-updates@domain.com

我在这些示例中使用了--arg,以展示它是如何使用的,也可以与外壳变量一起使用。另一方面,如果commercial只是一个固定的字符串,那么您可以简化:

代码语言:javascript
复制
jq -r '.commercial.google_groups | .[] | .[1]' file

要处理输出的每一行,只需使用外壳while read循环:

代码语言:javascript
复制
key=commercial
while read -r email; do
  echo "$email"
  # process each email individually here
done < <(jq -r --arg key "$key" '.[$key].google_groups | .[] | .[1]' file)

在这里,我使用了一个进程替换<(),它的作用类似于一个可由shell处理的文件。与使用管道相比,这样做的一个优点是不会创建子subshell。其中,这意味着循环中使用的变量在while块之后仍在作用域内,因此您可以在以后使用它们。

如果您更喜欢使用管道,只需删除done之后的零件,并将命令上移到第一行:

代码语言:javascript
复制
jq ... | while read -r email; do # etc.
票数 3
EN

Stack Overflow用户

发布于 2018-08-21 23:23:28

正如@TomFenech指出的那样,要求有点不清楚,但如果是你想要的电子邮件地址,他的答案的以下变体可能会引起兴趣:

代码语言:javascript
复制
key=commercial
$ jq -r --arg key "$key" '.[$key].google_groups[][] | select(test("@"))' department_groups.json
commercial-team@domain.com
commercial-updates@domain.com
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51943101

复制
相关文章

相似问题

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