linux下json文本解析工具:jq

前言

在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”
}
}
}

  1. 獲取整個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”
    ]
    }

  2. 獲取鍵"char"的值
    . 對指定鍵值過濾輸出
    [root@kilo-k5-controller baojx]# cat data.json |jq .char
    [
    “a”,
    “b”,
    “c”
    ]

  3. 獲取鍵值array中指定索引的數據
    .[]
    [root@kilo-k5-controller baojx]# cat data.json |jq .char[2]
    “c”

  4. 遍歷鍵值array中所有數據
    .[]
    [root@kilo-k5-controller baojx]# cat data.json |jq .char[]
    “a”
    “b”
    “c”
    *輸出三次

  5. 遍歷字典(鍵值對)而非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”
}
}

  1. 篩選出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”
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章