Shell下解析Json之jq

Posted by Codeboy on November 27, 2017

Json是一种轻量级的数据交换格式,简洁和清晰的层次结构使得Json成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

软件开发中经常会将对象序列化为Json,或者将对应的Json串反序列化为对象,在Android开发、服务端开发中都有很多库,如fastjson、gson等, 今天来看一下shell的json解析工具jq。

一、安装

jq的官网地址https://github.com/stedolan/jq

1. mac

brew install jq

mac下安装时可能会提示更新xcode,如提示请更新。

2. linux

apt-get install jq

ubuntu以及衍生版本可以直接仓库安装, 其他的发行版也可以尝试仓库或者源码编译

二、基本用法

解析json最常用的要数取值和获取数组长度操作了,给出一段常见的json,结合场景介绍下简单的使用:

{
  "data": [
    "张三",
    "李四"
  ],
  "code": "SUCCESS"
}

假定content代表上面的字符串。

jq获取字段时的格式为.字段名,例如获取code值时,操作如下:

echo $content | grep '.code'

获取data的长度的格式如下'length',直接使用不加.的length即可,操作如下:

echo $content | jq '.data|length'
echo $content | jq '.data' | jq 'length'

更加详细的文档可以参见 https://stedolan.github.io/jq/manual

三、场景使用

获取小胖轩博客中的文章列表,由于之前小胖轩网站中加入了博客搜索功能,有一个对应的文章索引https://www.codeboy.me/search/cb-search.json,我们需要做的操作如下:

1. 下载cb-search.json文件
2. 解析json文件,遍历文章列表
3. 输出文章标题列表

然后使用jq进行解析即可:

#!/bin/bash
# 获取codeboy.me中所有文章的标题

json=`curl -s "https://www.codeboy.me/search/cb-search.json"`;

#获取文章列表
list=`echo $json | jq '.data'`;

#获取文章长度
length=`echo $json | jq'.data|length' `;

# 解析data字段后,开始遍历每一项,取出标题
for index in `seq 0 $length`
do
	echo $list | jq ".[$index].title";
done

四、小结

shell下写脚本非常的方便快捷,有了jq,可以完成更丰富的操作。

如有任何知识产权、版权问题或理论错误,还请指正。

转载请注明原作者及以上信息。