请教一下 shell 里使用 jq 处理 json 应该怎么写

2021-12-12 21:58:51 +08:00
 Ryanjie

如题,有一个 json 文件,

[
    {
        "id": 0001,
        "name": "Zhang.San_123456",
        "email": {
            "qqmail": "mail1@qq.com",
            "163mail": "mail1@163.com"
        },
        "Address": {
            "Province": "Guangdong",
            "City": "Zhanjiang",
            "Country": "Xuwen"
        }
    },
    {
        "id": 0002,
        "name": "Li.Si_123456",
        "email": {
            "qqmail": "mail2@qq.com",
            "163mail": "mail2@163.com"
        },
        "Address": {
            "Province": "Sichuan",
            "City": "Yibin",
            "Country": "Jiang'an"
        }
    },
    {
        "id": 0003,
        "name": "Wang.Wu_123456",
        "email": {
            "qqmail": "mail3@qq.com",
            "163mail": "mail3@163.com"
        },
        "Address": {
            "Province": "Shanxi",
            "City": "Taiyuan",
            "Country": "Qingxu"
        }
    }
]

我想获取里面 name 字段为 Li.Si_123456 的一部分,返回时移除 email 里的 163mail ,返回内容如下:

[
    {
        "id": 0002,
        "name": "Li.Si_123456",
        "url": "http://xxx.com",
        "qqmail": "mail2@qq.com",
        "Address": {
            "Province": "Sichuan",
            "City": "Yibin",
            "Country": "Jiang'an"
        }
    }
]

请教一下这个使用 jq 处理应该怎么写呢,有大佬能指教一下吗?谢谢了^^

944 次点击
所在节点   Bash
3 条回复
gstqc
2021-12-12 22:07:11 +08:00
Ryanjie
2021-12-13 15:10:37 +08:00
@gstqc 谢谢大佬指教👍
Ryanjie
2021-12-13 15:20:09 +08:00
解决方法:
1. 获取里面 name 字段为 Li.Si_123456 的一部分:`jq --arg NAME ${UserName} '.[] | select(.name==$NAME)'`
2. 返回时移除 email 里的 163mail: `map({id, name, url, qqmail: .email.qqmail,...})`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/821717

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX