linux操作系统 jq命令手册

概要

命令名称: jq

功能描述: jq命令可以在命令行处理json数据

常用选项

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

示例

紧凑输出json数据

[root@linux-man src]# jq -c . test.json
[{"lon":113.30765,"name":"广州市","code":"4401","lat":23.422825},{"lon":113.59446,"name":"韶关市","code":"4402","lat":24.80296}]
[root@linux-man src]#

根据输出结果设置命令退出状态码

[root@linux-man src]# jq -c -e  '.[0]|{names}|.names' test.json
null
[root@linux-man src]# echo $?
1
[root@linux-man src]#

读取所有输出到一个数组(也就是所在json数据最外层套一个数组)

[root@linux-man src]# echo '{"safd":"fsafd"}' | jq -r .
{
  "safd": "fsafd"
}
[root@linux-man src]# echo '{"safd":"fsafd"}' | jq -s .
[
  {
    "safd": "fsafd"
  }
]
[root@linux-man src]#

输出原始字符串,而不是一个JSON格式

[root@linux-man src]# echo '{"safd":"fsafd"}' | jq  .[]
"fsafd"
[root@linux-man src]# echo '{"safd":"fsafd"}' | jq -r .[]
fsafd
[root@linux-man src]#

单色显示

[root@linux-man src]# echo '{"safd":"fsafd"}' | jq  .
{
  "safd": "fsafd"
}
[root@linux-man src]# echo '{"safd":"fsafd"}' | jq  -M .
{
  "safd": "fsafd"
}
[root@linux-man src]#

排序对象

[root@linux-man src]# jq . test.json 
[
  {
    "lon": 113.30765,
    "name": "广州市",
    "code": "4401",
    "lat": 23.422825
  },
  {
    "lon": 113.59446,
    "name": "韶关市",
    "code": "4402",
    "lat": 24.80296
  }
]
[root@linux-man src]# jq -S . test.json 
[
  {
    "code": "4401",
    "lat": 23.422825,
    "lon": 113.30765,
    "name": "广州市"
  },
  {
    "code": "4402",
    "lat": 24.80296,
    "lon": 113.59446,
    "name": "韶关市"
  }
]
[root@linux-man src]#

以table缩进

[root@linux-man src]# echo '{"safd":"fsafd"}' | jq  --tab .
{
    "safd": "fsafd"
}
[root@linux-man src]#

获取上面地理json数据里的name值

[root@linux-man src]# jq '.[]|{name}' test.json 
{
  "name": "广州市"
}
{
  "name": "韶关市"
}
[root@linux-man src]#

获取第一个name值

[root@linux-man src]# jq '.[0]|{name}' test.json 
{
  "name": "广州市"
}
[root@linux-man src]#

只打印出第一个map的值:

[root@linux-man src]# jq '.[0]|.[]' test.json 
113.30765
"广州市"
"4401"
23.422825
[root@linux-man src]#

打印出一个map的name值

[root@linux-man src]# jq '.[0]|.name' test.json 
"广州市"
[root@linux-man src]#

打印出一个map的name值并已普通字符串显示

[root@linux-man src]# jq -r '.[0]|.name' test.json 
广州市
[root@linux-man src]#

安装

jq工具收录在epel源中在centos系统里配置好yum源使用以下命令安装

yum -y install jq

源码安装请参考:https://github.com/stedolan/jq

相关命令