前言
在linux環境下,對於json文本閱讀是相當麻煩的,jq處理則相當輕鬆。
例子
使用測試內容data.json
[root@kilo-k5-controller baojx]# cat data.json
{
“char”: [“a”, “b”, “c”],
“data:info”: {
“bob”: {
“address”: “jiangsu-nanjing”,
“wage”: “10000”
},
“sam”: {
“address”: “jiangsu-taizhou”,
“wage”: “15000”
},
“rollyd”: {
“address”: “shanghai-jingan”,
“wage”: “20000”
}
}
}
-
獲取整個json內容
. 過濾器直接將json內容簡單輸出
[root@kilo-k5-controller baojx]# cat data.json |jq .
{
“data:info”: {
“rollyd”: {
“wage”: “20000”,
“address”: “shanghai-jingan”
},
“sam”: {
“wage”: “15000”,
“address”: “jiangsu-taizhou”
},
“bob”: {
“wage”: “10000”,
“address”: “jiangsu-nanjing”
}
},
“char”: [
“a”,
“b”,
“c”
]
} -
獲取鍵"char"的值
. 對指定鍵值過濾輸出
[root@kilo-k5-controller baojx]# cat data.json |jq .char
[
“a”,
“b”,
“c”
] -
獲取鍵值array中指定索引的數據
.[]
[root@kilo-k5-controller baojx]# cat data.json |jq .char[2]
“c” -
遍歷鍵值array中所有數據
.[]
[root@kilo-k5-controller baojx]# cat data.json |jq .char[]
“a”
“b”
“c”
*輸出三次 -
遍歷字典(鍵值對)而非array
5.1 遍歷鍵值對輸出效果同array遍歷,不同的是輸出數據僅爲鍵值對中的value
[root@kilo-k5-controller baojx]# cat data.json |jq .[]
{
“rollyd”: {
“wage”: “20000”,
“address”: “shanghai-jingan”
},
“sam”: {
“wage”: “15000”,
“address”: “jiangsu-taizhou”
},
“bob”: {
“wage”: “10000”,
“address”: “jiangsu-nanjing”
}
}
[
“a”,
“b”,
“c”
]
5.2 對鍵值對遍歷可以使用array指定索引類似的形式以獲取指定key的vaule
[root@kilo-k5-controller baojx]# cat data.json |jq ‘.[“char”]’
[
“a”,
“b”,
“c”
]
*這種操作有一個最大的好處是,當key含有特殊字符串不能直接使用"."進行過濾輸出時,可以用這種方法正常進行數據提取
[root@kilo-k5-controller baojx]# cat data.json |jq ‘.data:info’
error: syntax error, unexpected ‘:’, expecting $end
.data:info
^
1 compile error
[root@kilo-k5-controller baojx]# cat data.json |jq ‘.“data:info”’
error: syntax error, unexpected QQSTRING_START, expecting $end
.“data:info”
^
1 compile error
[root@kilo-k5-controller baojx]# cat data.json |jq ‘.[“data:info”]’
{
“rollyd”: {
“wage”: “20000”,
“address”: “shanghai-jingan”
},
“sam”: {
“wage”: “15000”,
“address”: “jiangsu-taizhou”
},
“bob”: {
“wage”: “10000”,
“address”: “jiangsu-nanjing”
}
}
- 篩選出address中jiangsu的鍵值對
[root@kilo-k5-controller baojx]# cat data.json |jq ‘.[“data:info”][]|select(.address|contains(“jiangsu”))’
{
“wage”: “15000”,
“address”: “jiangsu-taizhou”
}
{
“wage”: “10000”,
“address”: “jiangsu-nanjing”
}