V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ryanjie
V2EX  ›  Bash

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

  •  
  •   Ryanjie · 2021-12-12 21:58:51 +08:00 · 1117 次点击
    这是一个创建于 1066 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,有一个 json 文件,

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

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

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

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

    Ryanjie
        2
    Ryanjie  
    OP
       2021-12-13 15:10:37 +08:00
    @gstqc 谢谢大佬指教👍
    Ryanjie
        3
    Ryanjie  
    OP
       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,...})`
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:47 · PVG 03:47 · LAX 11:47 · JFK 14:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.