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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM