Linux下如何在命令行下解析处理json文件

最近调试Elasticsearch比较多,老用curl来查看数据,pretty=on固然是好,可是如果要具体看传回来的json数据,还是不方便,另外如果想在shell里处理json格式,就不知道如何是好了。就被迫改用python了,有没有在shell下调试json的工具呢?

有,就是jq,安装so easy:

1wget http://stedolan.github.io/jq/download/linux32/jq (32-bit system)  
2wget http://stedolan.github.io/jq/download/linux64/jq (64-bit system)  
3chmod +x ./jq  
4mv jq /usr/local/bin  

给个json样本文件

 1cat google.json  
 2{
 3        "name": "Google",
 4        "location":
 5                {
 6                        "street": "1600 Amphitheatre Parkway",
 7                        "city": "Mountain View",
 8                        "state": "California",
 9                        "country": "US"
10                },
11        "employees":
12                [
13                        {
14                                "name": "Michael",
15                                "division": "Engineering"
16                        },
17                        {
18                                "name": "Laura",
19                                "division": "HR"
20                        },
21                        {
22                                "name": "Elise",
23                                "division": "Marketing"
24                        }
25                ]
26}

看上面,{}括起来的是对象,如果是[]括起来的就是数组了,nodejs要注意这一点,其实json是js的Object的子集。

获取对象:

1cat google.json | jq '.name'  
2"Google"

获取嵌套对象:

1cat google.json | jq '.location.city'  
2"Mountain View"

获取一个数组的值:

1cat google.json | jq '.employees[0].name'  
2"Michael"

获取对象的多个字段:

1cat google.json | jq '.location | {street, city}'  
2{
3  "city": "Mountain View",
4  "street": "1600 Amphitheatre Parkway"
5}

很简单吧,和curl结合起来,就可以在shell进行编程处理json文件了。

curl和jq结合的例子:

1curl -s ... | jq .  

如果返回的是一个字符串,不想要字符串的引号,-r即可

1curl -s ... | jq '.location.city'  
2"Mountain View"
3
4curl -s ... | jq -r '.location.city'  
5Mountain View  

如果要计算某个数组的长度,length

1curl -s ... | jq '.data | length'  

最后放上Document:

https://stedolan.github.io/jq/manual/

jq现在已经到1.7了,有很多新用法,可以计算等等,用法大全:

http://hyperpolyglot.org/json


Linu下如何让mount显示的很整齐
Jenkins中execute Shell的注意事项
comments powered by Disqus