下载

MacOS

1
$ brew install jq

Ubuntu

1
$ sudo apt install jq -y

CentOS

CentOS 需要将 EPEL 的软件包添加到源列表中

1
2
$ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum repolist

安装

1
$ sudo yum install jq -y

更多安装方式见文档

使用

输出 json 文件

1
2
3
4
5
$ jq '.' test.json

{
"name": "wxnacy"
}

管道命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ curl -s http://ip-api.com/json | jq
{
"as": "AS22552 eSited Solutions",
"city": "Orlando",
"country": "United States",
"countryCode": "US",
"isp": "eSited Solutions",
"lat": 28.5434,
"lon": -81.2256,
"org": "eSited Solutions",
"query": "104.222.246.242",
"region": "FL",
"regionName": "Florida",
"status": "success",
"timezone": "America/New_York",
"zip": "32825"
}

过滤

过滤 value

1
2
$ echo '{"name":"wxnacy", "id": 1}' | jq '.name'
"wxnacy"

过滤字段

1
2
3
4
5
$ echo '{"name":"wxnacy", "id": 1, "age": 23}' | jq '{"name", "id"}'
{
"name": "wxnacy",
"id": 1
}

判断空值

1
2
3
4
$ echo '{"name":"wxnacy", "id": 1, "age": 23}' | jq '{"time"}?'
{
"time": null
}
1
2
$ echo '{"name":"wxnacy", "id": 1}' | jq '.time?'
null

截取数组

1
2
$ echo '[1, 2, 3, 4]' | jq '.[0]'
1
1
2
3
4
5
$ echo '[1, 2, 3, 4]' | jq '.[0:2]'
[
1,
2
]

获取数组和字典的所有值

1
2
3
4
5
$ echo '[1, 2, 3, 4]' | jq '.[]'
1
2
3
4
1
2
3
$ echo '{"name":"wxnacy", "id": 1}' | jq '.[]'                                            ⬡ 8.4.0
"wxnacy"
1

使用逗号获取多个值

1
2
3
$ echo '{"name":"wxnacy", "id": 1}' | jq '.name, .id'
"wxnacy"
1
1
2
3
$ echo '[1, 2, 3, 4]' | jq '.[0, 3]'
1
4

更多过滤方法见文档

更多使用实例

获取列表中某个字段的值

Linux 强大的 JSON 数据命令行工具 jq-LMLPHP

1
2
3
4
5
6
7
$ curl -s https://raw.githubusercontent.com/wxnacy/file/master/common/V9MiMl2DwA4.json | jq '.data.items[].id' | sed 's/"//g'

V9MiMl2DwA4
wQKKZXYx7eg
NfFnHs67qjY
826v1-bvSwA
IAK-IP0Sjic
03-17 00:50