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

mac

brew install jq

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

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,可以完成更丰富的操作。

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

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

Shell下解析Json之jq