linux使用jq处理json数据

JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHPjson_encodejson_decode,干的相当的漂亮。Linux下也有处理处理JSON的神器:jq

格式化json

1
2
$ curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null
{"code":0,"data":{"country":"\u4e2d\u56fd","country_id":"CN","area":"\u534e\u5317","area_id":"100000","region":"\u5317\u4eac\u5e02","region_id":"110000","city":"\u5317\u4eac\u5e02","city_id":"110100","county":"","county_id":"-1","isp":"\u8054\u901a","isp_id":"100026","ip":"202.106.0.20"}}

这样的数据大家看起来是不是非常的头疼,以前都是通过在线JSON格式化工具做的.
jq就可以检查JSON的合法性,并把JSON格式化成更友好更可读的格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null | jq
{
"code": 0,
"data": {
"country": "中国",
"country_id": "CN",
"area": "华北",
"area_id": "100000",
"region": "北京市",
"region_id": "110000",
"city": "北京市",
"city_id": "110100",
"county": "",
"county_id": "-1",
"isp": "联通",
"isp_id": "100026",
"ip": "202.106.0.20"
}
}

现在是不是看着舒服多了,可阅读性明显增加了

获取value

获取value类似python,根据key获取value

1
2
3
4
5
6
7
8
$ curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null | jq '.code'
0
curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null | jq '.data.country_id'
"CN" //嵌套解析
$ curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null | jq '.codes'
null //解析不存在的元素,会返回null

内建函数

jq还有一些内建函数如 keyhas

key获取JSON中的key元素

1
2
3
4
5
6
7
8
$ curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null | jq 'keys'
[
"code",
"data"
]
```
## has判断是否存在某个key

$ curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null | jq ‘has(“data”)’
true

$ curl http://ip.taobao.com/service/getIpInfo.php?ip=202.106.0.20 2>/dev/null | jq ‘has(“datas”)’
false
```

###jq官网

###jq-github

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器