jq命令允许直接在命令行下对JSON进行操作,包括分片、过滤、转换等 ,jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上。预编译的二进制文件可以直接在Linux、OS X和windows系统上运行,当然在linux和OS X系统你需要赋与其可执行权限;在linux系统中也可以直接用yum安装。

下载地址 https://stedolan.github.io/jq/download/

本文主要介绍其使用,默认是已经安装好的,没有安装的,请自行安装。

常用选项

-c 紧凑输出json数据
-e 根据输出结果设置命令退出状态码
-s 读取所有输入到一个数组
-r 输出原始字符串,而不是一个JSON格式
-C 高亮显示
-M 单色显示
-S 排序对象
--tab 使用tab缩进

现在先准备json串,如下kumufengchun.json:

{"name":"kumufengchun","age":"","city":"beijing","email":"kumufengchun@gmail.com","date":"Thursday","country":"China","company":["baidu","google","alibaba"]}"

如下test.json:

[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]

1.用jq .直接查看

jq . kumufengchun.json

或者

cat kumufengchun.json | jq .

输出如下:

[root@localhost ~]$ cat kumufengchun.json | jq .
{
"name": "kumufengchun",
"age": "",
"city": "beijing",
"email": "kumufengchun@gmail.com",
"date": "Thursday",
"country": "China",
"company": [
"baidu",
"google",
"alibaba"
]
}

是已经格式化的json数据串,在linux系统下还高光显示,key和value用不同的颜色表示,如下图:

2.输出某个字段或者某个索引的值

语法:jq  '.<key>'  ,这里key是字段名称

[root@localhost ~]$ jq .name kumufengchun.json
"kumufengchun"[root@localhost ~]$ jq '.name' kumufengchun.json
"kumufengchun"[root@localhost ~]$ jq '.company' kumufengchun.json
[
"baidu",
"google",
"alibaba"
]

3.输出数组的值

语法:jq '.[<value>]' ,这里value是数组的索引整数值

[root@localhost ~]$ jq '.company[1]' kumufengchun.json
"google"[root@localhost ~]$ jq '.company[2]' kumufengchun.json
"alibaba"

4.输出列表、数组的一部分,对其进行切片

语法:jq '.<list-key>[s:e]',返回的是数组或者列表的index从s开始(包括s)到e结束(不包括e)

[root@localhost ~]$ jq '.company[0:2]' kumufengchun.json
[
"baidu",
"google"
]

也可以省略开始的index,只有结束的index,如下,仍然是不包括结束index的值:

[root@localhost ~]$ jq '.company[:3]' kumufengchun.json
[
"baidu",
"google",
"alibaba"
]

也可以省略结束的index,只有开始的index,如下,输出到最后:

[root@localhost ~]$ jq '.company[1:]' kumufengchun.json
[
"google",
"alibaba"
]

开始的索引也可以是负数,表示从后边倒着数,从-1开始数:

[root@localhost ~]$ jq '.company[-2:]' kumufengchun.json
[
"google",
"alibaba"
]

5.循环输出所有的值,如数组嵌套

语法:jq '.[]'

[root@localhost ~]$ jq '.[]' test.json
{
"name": "JSON",
"good": true
}
{
"name": "XML",
"good": false
}[root@localhost ~]$ jq '.[]' kumufengchun.json
"kumufengchun"
""
"beijing"
"kumufengchun@gmail.com"
"Thursday"
"China"
[
"baidu",
"google",
"alibaba"
]

6.输出多个索引的值,可以用逗号分割

语法: jq '.key1,.key2'

[root@localhost ~]$ jq '.name,.age' kumufengchun.json
"kumufengchun"
""[root@localhost ~]$ jq '.date,.company[]' kumufengchun.json
"Thursday"
"baidu"
"google"
"alibaba"

如果是数组,用中括号括起来要输出的键值,键值先写谁,先输出谁

[root@localhost ~]$ jq '.company[2,0]' kumufengchun.json
"alibaba"
"baidu"

7.用管道符号|可以对其进行再次处理

语法:jq .[] | .<key1>

[root@localhost ~]$ jq '.[]|.name' test.json
"JSON"
"XML"

8.括号的作用

[root@localhost ~]$ echo | jq '(.+2)*5'[root@localhost ~]$ echo {,,} | jq '(.+2)*5'

9.length求长度,如果是字符串是求的字符串的长度,如果是数组则求得是数组的长度

[root@localhost ~]$ cat kumufengchun.json | jq '.[] | length'

10.输出所有的keys

语法: jq keys

[root@localhost ~]$ cat kumufengchun.json | jq 'keys'
[
"age",
"city",
"company",
"country",
"date",
"email",
"name"
]

输出数组的keys:

[root@localhost ~]$ cat kumufengchun.json | jq '.company | keys'
[
,
,]

11.判断存不存在某个键

[root@localhost ~]$ cat kumufengchun.json | jq 'has("email")'
true
[root@localhost ~]$ cat kumufengchun.json | jq 'has("address")'
false

12.向josn文件中追加数据

实例1:以 /etc/docker/daemon.json 为例

原本数据如下:

{"dns": ["114.114.114.114","8.8.8.8"],"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}

执行追加命令

cat /etc/docker/daemon.json | jq '.["log-driver"]="json-file"' > tmp.json && mv -f tmp.json /etc/docker/daemon.json
cat /etc/docker/daemon.json | jq '.["log-opts"]={"max-size":"500m", "max-file":"3"}' > tmp.json && mv -f tmp.json /etc/docker/daemon.json

最终数据如下:

{"dns": ["114.114.114.114","8.8.8.8"],"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"],"log-driver": "json-file","log-opts": {"max-size": "500m","max-file": "3"}
}

实例2:

objName="objName"
objJSON='{"test": "json"}'
echo '{"data":{}}' |jq --arg     objectName "$objName" \--argjson jsonString "$objJSON" \'.data[$objectName] += $jsonString'

输出:

{"data": {"objName": {"test": "json"}}
}

linux shell json操作命令 jq 简介相关推荐

  1. linux shell json解析命令 jq 简介

    jq简介 jq可以对json数据进行分片.过滤.映射和转换,和sed.awk.grep等命令一样,都可以让你轻松地把玩文本.它能轻松地把你拥有的数据转换成你期望的格式,而且需要写的程序通常也比你期望的 ...

  2. linux jq 数组,linux shell脚本 用jq命令在JSON文件肿添加一个map或数组

    导师分配了一个产线日志转换的项目,线上产生的日志是多个文件,可读性不高,需求是把所有的日志转换成JSON文件.每一个字段对应一个值,看起来清晰明了. 之前没写过shell脚本,不知道怎么处理JSON, ...

  3. Linux 安装json神器 jq

    wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 chmod +x ./jq cp jq /u ...

  4. linux shell head tail 用法简介

    head和tail是一组想对应的命令,默认分别显示文件的开头和末尾10行记录. head head 命令可以将一段文本的开头一部分输出到标准输出. head命令既可以处理文本文件也可以处理标准输入. ...

  5. linux shell 文件比较 diff 简介

    diff 可以用来比较文件和文件夹是否相同 比较文件 diff file1 file2 >/dev/null 比较文件夹 diff -rNaq dir1 dir2 >/dev/null - ...

  6. linux shell 使用代理 proxychains 简介

    1.proxychains安装 git clone https://github.com/rofl0r/proxychains-ng.git cd proxychains-ng ./configure ...

  7. Linux Shell操作json工具jq

    Linux Shell操作json工具jq 背景 使用方式 背景 随着后台项目的开发,json协议的可视性好,组装与解封装的工具在各个平台都比较完备,所以能通过shell快速组装与解封装json能大大 ...

  8. Linux Shell环境下用jq命令处理json文件

    有时候需要在Shell环境下处理json文件,这时使用jq命令非常方便. 安装 CentOS下可以直接通过yum安装: yum install jq -y 使用方法 假设有一个名为test.json的 ...

  9. linux下json数据解析,Linux下使用jq简单解析json的方法

    jq简介 jq 是一款命令行下处理 JSON 数据的工具.其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出 ...

最新文章

  1. “复制粘贴”发明人,竟是物理学博士转行做程序媛!
  2. 浅析Java中的final关键字
  3. 【ARM】Tiny4412裸板编程之MMU(段 16M)
  4. spring中事务配置的3种方式-2
  5. java string补空格_Java String字符串补0或空格详解
  6. PCB布局中丝印大小及位置调节方法
  7. 在网页中嵌入百度地图的步骤
  8. 目标客户画像_怎么进行目标人群的用户画像分析?
  9. 迅为4412开发平台Zigbee模块在物联网智能家居中的应用
  10. Chrome浏览器误删书签恢复
  11. xp系统桌面没有计算机,在xp系统中,为什么桌面所有图标都消失?
  12. C#--Link to sql语法大全
  13. html wap广告代码,手机wap底部悬浮JS广告代码
  14. 中国企业NAS行业市场供需与战略研究报告
  15. tcpdump抓包神器详细介绍
  16. Python爬虫——12306网站车次信息
  17. 说说靠自学成功入行java的难度
  18. 无法查询往年计算机成绩,计算机二级成绩过了的话是不是一年之内在网上能查到一年之后就查不到了啊...
  19. 华为加码布局 VR/AR趁势启航
  20. 华为Atlas200DK开发从零开始1.开发环境搭建

热门文章

  1. CmakeList中加入OpenCV编译项
  2. kubernetes(k8s)全面介绍
  3. 蚂蚁金服胡喜:自主研发不是用来捏在手里,是用来开放的
  4. BLOB图像处理技术
  5. Dijkstra 最短路径算法 秒懂详解
  6. 接口测试中的接口到底是什么?
  7. QQ个人文件夹保存位置无效
  8. 设置CentOS开机启动程序及定时关机
  9. tensorflow function笔记: tf.tile
  10. nginx同一个地址端口代理多个页面