• jq基本用法:修改访问


    jq的基本用法:修改访问

    以输入t.json为例:

    {
      "F1": 9,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522"
        }
      ]
    }
    

    修改字段

    $ jq '.F1=100' t.json  
    {
      "F1": 100,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522"
        }
      ]
    }
    
    $ jq '.F5[1].F52="new value"' t.json                  
    {
      "F1": 9,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "new value"
        }
      ]
    }
    

    增加字段

    $ jq '.F3="new value"' t.json        
    {
      "F1": 9,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522"
        }
      ],
      "F3": "new value"
    }
    
    $ jq '.F5[1].F53="new value"' t.json 
    {
      "F1": 9,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522",
          "F53": "new value"
        }
      ]
    }
    

    增加数组和map

    $ jq '.F5[2]={"F51": 513, "F52": "F523"}' t.json      
    {
      "F1": 9,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522"
        },
        {
          "F51": 513,
          "F52": "F523"
        }
      ]
    }
    

    如果数组是简单类型:

    $ jq . t.json
    {
      "F3": [
        "F31",
        "F32"
      ]
    }
    $ jq '.F3[2]="F33"' t.json
    {
      "F3": [
        "F31",
        "F32",
        "F33"
      ]
    }
    

    增加数组元素

    利用length函数得到数组的长度,然后把值设置到当前位置。

    $ jq '.F3[.F3|length]="NEWValue"' t.json
    

    删除

    使用del函数删除元素,包括基本元素,对象和数组元素。

    $ jq 'del(.F1)' t.json 
    {
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522"
        }
      ]
    }
    
    $ jq 'del(.F5[1].F52)' t.json    
    {
      "F1": 9,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512
        }
      ]
    }
    

    删除一个数组成员:

    $ jq 'del(.F5[1])' t.json    
    {
      "F1": 9,
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        }
      ]
    }
    

    删除数组成员

    $ cat t.json
    {
      "F": [
        "F0",
        "F1",
        "F2",
        "F3",
        "F4",
        "F5"
      ]
    }
    $ jq 'del(.F)' t.json  # delete field F
    {}
    $ jq 'del(.F[])' t.json  # delete members of field F
    {
      "F": []
    }
    $ jq 'del(.F[0])' t.json  # delete member of fields F[0]
    {
      "F": [
        "F1",
        "F2",
        "F3",
        "F4",
        "F5"
      ]
    }
    $ jq 'del(.F[0,2,4])' t.json  # delete member of fields F[0], F[2], and F[4]
    {
      "F": [
        "F1",
        "F3",
        "F5"
      ]
    }
    

    执行多次修改

    使用("|")连接多个命令。
    连接符("|")功能类似shell里面的("|"),把前面命令的输出作为后面命令的输入。

    $ jq 'del(.F1) | del(.F5[1])' t.json              
    {
      "F2": "F21",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        }
      ]
    }
    

    修改多个字段:

    $ jq '.F1="New F1" | .F2="New F2"' t.json
    {
      "F1": "New F1",
      "F2": "New F2",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522"
        }
      ]
    }
    

    或者:

    $ jq '. +{F1: "New Fa", F2: "New F2"}' t.json
    {
      "F1": "New Fa",
      "F2": "New F2",
      "F5": [
        {
          "F51": 511,
          "F52": "F521"
        },
        {
          "F51": 512,
          "F52": "F522"
        }
      ]
    }
    
     
     
    0人点赞
     
     


    作者:CodingCode
    链接:https://www.jianshu.com/p/2ea233708b1d
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Navicat Premium 12 破解汉化64位 windows版本
    Tkinter入门简明教程
    python tkinter-消息框、对话框、文件对话框
    python中ui自动化selenium方法封装分享
    Windows利用EasyWebSvr起web服务
    Windows安装mysql服务端
    北京个人所得税纳税记录打印
    Java并发之ReentrantReadWriteLock源码解析(二)
    Java并发之ReentrantReadWriteLock源码解析(一)
    Java并发之Semaphore源码解析(二)
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/13417989.html
Copyright © 2020-2023  润新知