使用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格式有可能不同需要自行修改