最近调试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了,有很多新用法,可以计算等等,用法大全: