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