当我们在LInux下需要处理json数据时,第一反应是用脚本编写一个工具,这样即耗时又不通用. 本文将介绍专门的命令行json处理工具jq
我们先安装jq,再来看看如何使用这个工具
yum install jq -y
一般我都选择yum安装,当然也可以使用源码来安装,源码可以在github上下载,地址是:https://github.com/stedolan/jq或者https://pkgs.org/download/jq这个地方下载对应类型的安装包
接下来我们讲讲如何使用jq,首先我们先构建一个json来方便我们下一步的操作讲解,文件名命名为test.json
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}解析json对象,我们这样操作
cat test.json | jq '.name' "中国" cat test.json | jq '.province[0].name' #取数组的第一个对象名字 "黑龙江" cat test.json | jq '.province[].name' #不定义索引数组的下标,那么将会遍历输出所有对应对象的名称 "黑龙江" "广东" "台湾" "新疆"
提取节点字段,我们这样操作
cat test.json | jq '.province[0]' #这样我们将得到一个json对象节点
{
"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元素
$ 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
$ cat test.json | jq 'has("name")'
true
$ cat test.json | jq '.province[0] | has("name")'
true
$ cat test.json | jq 'has("noname")'
falsejq 带上-r 选项可以去掉双引号
#不带-r选项
echo '{"a":"foo","b":"bar"} | jq .a
"foo"
#带-r选项
echo '{"a":"foo","b":"bar"} | jq -r .a
foo验证json,若json串格式错误的话,可以直接使用jq运行,会报出具体错误.
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/523
评论列表