Linux下使用jq简单解析json的方法
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”,具体内容如下:
简单的读取方法如下:
#存储到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来实现了!