AnSwErYWJ's Blog

Linux下处理json数据

字数统计: 724阅读时长: 16 min
2016/10/10

当我们在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数据进行操作了.

原文作者:AnSwErYWJ

原文链接:https://answerywj.com/2016/10/10/jq/

发表日期:2016/10/10 10:10

版权声明:本文采用Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License进行许可.
Creative Commons License

CATALOG
  1. 1. 安装
  2. 2. 使用
    1. 2.1. 解析json对象
    2. 2.2. 提取字段
  3. 3. 内建函数
    1. 3.1. 验证json
  4. 4. 总结