Linux Shell环境下用jq命令处理json文件

  1. 安装
    CentOS下可以直接通过yum安装:

    yum install jq -y
    
  2. 使用方法
    假设有一个名为test.json的文件,内容如下:

    {
        "Summary": {
            "Version": "1.0",
            "Comment": [
                "List1",
                "List2"
            ]
        }
    }
    

    使用jq命令可以用描述性的语言来获取json文件中的元素:

    [root@localhost ~]# jq .Summary test.json 
    {
      "Version": "1.0",
      "Comment": [
        "List1",
        "List2"
      ]
    }
    [root@localhost ~]# jq .Summary.Version test.json 
    "1.0"
    [root@localhost ~]# jq .Summary.Comment[1] test.json 
    "List2"
    

    jq命令还提供一些内建函数,比如利用keys获取json文件中的所有key,has判断是否存在某个key:

    [root@localhost ~]# jq 'keys' test.json
    [
      "Summary"
    ]
    [root@localhost ~]# jq 'has("Summary")' test.json
    true
    [root@localhost ~]# jq 'has("nonexist")' test.json
    false
    

    在脚本中使用jq命令
    脚本中往往有这样的需求:取出json文件中的某一个元素,存储到变量中做下一步处理。但是注意到,通过jq命令取出的字符型元素是带引号的,例如:

    [root@localhost ~]# jq .Summary.Version test.json 
    "1.0"
    

    但是我们往往不需要这个引号,这时可以使用Shell提供的字符串替换功能

    1. 使用 -r参数

      [root@dc-controler dbconf]# jq -r 'keys' test.json
      Summary
      
    2. 编写脚本example.sh进行示例:

      #!/bin/bash
      Var1=$(jq .Summary.Version test.json)
      echo "Var1: $Var1"
      Var2=${Var1//\"/}
      echo "Var2: $Var2"
      

      执行该脚本可以看到,Var2被去除了引号

      [root@localhost ~]# ./example.sh 
      Var1: "1.0"
      Var2: 1.0
      

      其实这是用了字符串的替换语法:

      # //代表全部替换
      ${Str//"被替换的内容"/"替换的内容"}
      

      在上述脚本中,我们想删除掉",那么可以理解成将"替换成空,因此就可以用脚本中所示的语法来处理了:
      Var2=${Var1//\"/}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值