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

有时候需要在Shell环境下处理json文件,这时使用jq命令非常方便。

  • 安装
    CentOS下可以直接通过yum安装:
yum install jq -y
  • 使用方法
    假设有一个名为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提供的字符串替换功能。编写脚本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//\"/}
jq是一款命令行下处理JSON数据的工具,可以通过一系列的过滤器和表达式来转换JSON数据并输出需要的结果。安装jq可以使用不同的方法,例如在macOS上使用brew install jqLinux上使用wget命令下载jq,并设置可执行权限后移动到/usr/bin目录,CentOS上使用yum install jq,Ubuntu上使用apt命令安装jq。 在使用jq解析JSON字符串时,可以使用不同的表达式来获取想要的数据。例如,要获取根级别的key,可以使用jq -r keys[]命令,要获取下层成员的key,可以先使用jq .c命令获取"c"字段的内容,然后再使用jq -r keys[]命令来获取下层成员的key。 参考引用: :自己用shell处理json字符串的时候,开发输入格式的不通会导致解析字符串有问题,所以这里用到了jq工具 jq 是一款命令行下处理 JSON 数据的工具。其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出到标准输出中。jq 的这种特性使我们可以很容易地在 Shell 脚本中调用它。 :获取串行json的key $ cat test.json { "a": "aa", "b": "bb", "c": { "dd": "ddd", "ee": "eee" } } //获取根级别的keys: $ jq -r keys[] test.json a b c 获取下层成员的keys: $ jq .c test.json | jq -r keys[] dd ee :因为最近要处理一些 JSON 数据格式,所以在经过一番搜索后 最终找到了 jq 这个很棒的工具。jq 允许你直接在命令行下对 JSON 进行操作,包括分片、过滤、转换等等。 让我们通过几个例子来说明 jq 的功能: 一、输出...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值