jq命令常用用法

jq命令用于数据格式化,json和数组数据提取,重组数组对象,切片,过滤等操作
参考官网:https://stedolan.github.io/jq/manual/
jq在线解析界面:https://jqplay.org/
参考资料:https://blog.csdn.net/Rambo_Yang/article/details/107942452

安装

mac 安装:brew install jq
centos 安装:yum install jq
ubuntu: 安装:apt-get install jq

格式化

jq [option] filter [files]
jq+可选参数+过滤条件+文件位置
过滤参数:
. :格式化json内容
.foo :输出指定属性,使用.嵌套访问字段
.[下标] :输出指定数组元素
.[] :输出指定数组中全部元素
, :多个属性过滤时,使用逗号分隔
| :管道过滤,将指定的数组元素中的某个属性作为过滤条件
注:jq过滤条件都是以.开头
实例:
lq.txt文件如下:
{
"name":"lq",
"age":24,
"data":{"v1":12,"v2":24,"v3":[1,2,3]}

}

格式化

cat lq.txt | jq '.'

从json内容提取

使用.嵌套访问
cat lq.txt | jq .data.v1 --获取指定字段的值
cat lq.txt | jq ".data.v1,.data.v2" --使用逗号分隔,取多个字段的值;返回值以换行分隔
cat lq.txt | jq ".data.v3[]" --提取v3数组的全部元素
cat lq.txt | jq ".data.v3[0,2]" --提取v3数组的多个元素

从数组中提取单个数据

echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[0]

从数组中提取所有数据

echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[]

过滤多个值

echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[0,1]

重组

数据重组成数组

echo '{"a":1,"b":2,"c":3,"d":4}' | jq '[.a,.b]' --返回[1,2]
echo '{"a":1,"b":2,"c":3,"d":4}' | jq '.[]' --返回[1,2,3,4]

数据重组成对象

echo '{"a":1,"b":2,"c":3,"d":4}' | jq '{"tmp":.b}' --输出{"tmp":2}
echo '{"a":1,"b":2,"c":3,"d":4}' | jq '{a,b}' --输出{"a":1,"b":2}
cat lq.txt | jq '.data | {v1,v2}' --输出{v1:12,v2:24};取嵌套的数组组成对象,不能直接使用,需要遍历进去

管道使用

echo [{"a":1,"b":2},{"a":3,"d":4}] | jq '.[] | .a'

内置函数使用

keys获取json中的所有key

echo '{"a":1,"b":2,"c":3,"d":4}' | jq 'keys' --返回["a","b","c","d"]

返回元素的长度length

echo '{"a":1,"b":2,"c":3,"d":4}' | jq 'length' --返回元素个数:4
echo '[{"a":1,"c":2}, "string", {"a":2}, null]' | jq '.[] | length' --返回2 6 1 0

数据增删改

删除元素

cat lq.txt | jq 'del(.data.v1)' --删除json中的元素v1

更改元素值

cat lq.txt | jq '.age={dd:5}' --更改age元素的值为{"dd":5}

增加值

cat lq.txt | jq '. + {d:4}' --在全部元素的基础上增加元素d
cat lq.txt | jq '.data + {d:4}' --在data元素值基础上增加元素d

posted @ 2020-11-18 23:03  未来可期_Durant  阅读(3675)  评论(0编辑  收藏  举报