吾八哥博客

您现在的位置是:首页 > 笔记专题 > 正文

笔记专题

Linux下使用jq简单解析json的方法

吾八哥2018-07-15笔记专题8202

jq简介

jq 是一款命令行下处理 JSON 数据的工具。其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出到标准输出中。jq 的这种特性使我们可以很容易地在 Shell 脚本中调用它。jq支持的平台有linux/osx/windows等等,目前为止最新版本为1.5,官方链接:https://stedolan.github.io/jq/


jq安装方法

安装方法参考官方说明https://stedolan.github.io/jq/download/,Linux下安装方法如下:

debian/ubuntu安装源安装:

sudo apt-get install jq

如果安装的版本不是最新的1.5,请更换一下安装源!

下载二进制安装:

wget http://stedolan.github.io/jq/download/linux64/jq
chmod +x ./jq
sudo cp jq /usr/bin

源码安装方法为:

git clone https://github.com/stedolan/jq.git
cd jq
autoreconf -i
./configure --disable-maintainer-mode
make
sudo make install


jq的简单使用

jq官方手册:https://stedolan.github.io/jq/manual/ ,但我们平时基本上掌握一些基本用法就够了。实际工作中可能大部分都是shell脚本里请求http接口返回的json数据,这里直接拿一个josn数据的文本来练习使用方法来练习使用方法了。练习数据文件名“test.json”,具体内容如下:

{
    "Name": "吾八哥",
    "Age": 33,
    "website": "www.5bug.wang",
    "Group": [{
        "ID": 1001,
        "Name": "讨论组1"
},
{
        "ID": 1002,
        "Name": "讨论组2"
    }]
}

简单的读取方法如下:

#存储到json变量里

json=$(cat test.json)

#以json格式显示

echo $json | jq '.'

#读取Name字段

echo $json | jq '.Name'

#读取Group的长度

echo $json | jq '.Group | length'

#读取Group数组内的索引为1的item里的ID

echo $json | jq '.Group[1].ID'

#读取website和Group数组内的索引为1的item

echo $json | jq '[.website,.Group[1]]'

#显示当前层下所有的字段名

json | jq '.' | jq 'keys'

#判断是否包含某个字段名

echo $json | jq '.' | jq 'has("Age")'

这里只是非常基础的使用方法,还有很多其他的好用的功能,例如fitter,数组切片,迭代器,内置运算,映射,过滤路径操作等等,大家可以看看文档稍微了解一下留个印象,以后遇到类似的使用场景就知道是否可以通过jq来实现了!