在Linux Shell脚本中使用jq工具解析json数据

4,472 阅读1分钟

使用C编译嵌入式后台程序时,数据有时需要存储在文件中,我暂时是这么存储数据的,不像MySql那样可以拿到数据后直接在JAVA中使用,所以需要自己去解析json数据,但是好麻烦,在网上搜索到可以使用jq工具来解析json数据这样会很方便很多。

下载jq

ubuntu系统下载jq

$ apt-get install jq

centos7系统下载jq

# 添加epel源
$ wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ rpm -ivh epel-release-latest-7.noarch.rpm
$ yum repolist
$ yum -y install jq

ArchLinux系统下载jq

# 我是在ARM架构下的下载的,ARM架构下有可能需要更换一下源,放到做上一行即可
$ vim /etc/pacman.d/mirrorlist
Server = http://mirrors.163.com/archlinuxarm/$arch/$repo
$ pacman -S jq

操作

创建json数据

$ vim test-json
{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

格式化json数据

$ jq . test-json
{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

查看json数据中的key

$ jq "keys" test-json
[
  "completed",
  "id",
  "title",
  "userId"
]

查看某一个key值

$ jq ".id "test-json
1

不使用jq时解析json文件

在shell文件中可以使用sed命令来修改文件中的内容

sed -i 's/"IPMode":[^,]*/"IPMode": 2/g' [file_name]

使用awk + grep 命令来获取value的值

cat [file_name] | awk -F '[,]' '{for(i = 1; i <= NF; i++){print $i}}' | grep -w "IPMode" | awk '{print $3}'

NF: 是通过逗号分隔后的行数

把json分开后,使用grep命令把想要找的key值找出来,再使用awk把值筛选出来,每个人的json格式有可能不同需要自行修改

参考