Linux下处理json数据

当我们在LInux下需要处理json数据时,第一反应是用脚本编写一个工具,这样即耗时又不通用. 本文将介绍专门的命令行json处理工具jq.

安装

Ubuntu用户可以直接使用下列命令安装:

1
$ sudo apt-get install jq

也可以选择源码安装,当然最简单的方法是直接下载可执行文件,不过需要找到适配你系统的版本.

详细的安装方法可以参考这里.

使用

首先构建一个基本的字符串作为示例 test.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}

解析json对象

1
2
3
4
5
6
7
8
9
10
11
$ cat test.json | jq '.name'
"中国"
$ cat test.json | jq '.province[0].name'
"黑龙江"
$ cat test.json | jq '.province[].name'
"黑龙江"
"广东"
"台湾"
"新疆"

提取字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
$ cat test.json | jq '.province[0]'
{
"cities": {
"city": [
"哈尔滨",
"大庆"
]
},
"name": "黑龙江"
}
$ cat test.json | jq '.province[]'
{
"cities": {
"city": [
"哈尔滨",
"大庆"
]
},
"name": "黑龙江"
}
{
"cities": {
"city": [
"广州",
"深圳",
"珠海"
]
},
"name": "广东"
}
{
"cities": {
"city": [
"台北",
"高雄"
]
},
"name": "台湾"
}
{
"cities": {
"city": [
"乌鲁木齐"
]
},
"name": "新疆"
}
$ cat test.json | jq '.province[0] | {name ,cities}'
{
"cities": {
"city": [
"哈尔滨",
"大庆"
]
},
"name": "黑龙江"
}
$ cat test.json | jq '.province[0] | {name}'
{
"name": "黑龙江"
}

内建函数

keys用来提取json中的key元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ cat test.json | jq 'keys'
[
"name",
"province"
]
$ cat test.json | jq '.|keys'
[
"name",
"province"
]
$ cat test.json | jq '.province[0]|keys'
[
"cities",
"name"
]
$ cat test.json | jq '.province[]|keys'
[
"cities",
"name"
]
[
"cities",
"name"
]
[
"cities",
"name"
]
[
"cities",
"name"
]

has用来判断是否存在某个key:

1
2
3
4
5
6
$ cat test.json | jq 'has("name")'
true
$ cat test.json | jq '.province[0] | has("name")'
true
$ cat test.json | jq 'has("noname")'
false

验证json

若json串格式错误的话,可以直接使用jq运行,会报出具体错误.

总结

有了这个工具.你就可以直接在命令行或者shell脚本对json数据进行操作了.

About me

forthebadge

Creative Commons License This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。