linux命令下jq的用法及說明
jq簡介
jq可以對json數(shù)據(jù)進行分片、過濾、映射和轉(zhuǎn)換,和sed、awk、grep等命令一樣,都可以讓你輕松地把玩文本。
它能輕松地把你擁有的數(shù)據(jù)轉(zhuǎn)換成你期望的格式,而且需要寫的程序通常也比你期望的更加簡短。
jq是用C編寫,沒有運行時依賴,所以幾乎可以運行在任何系統(tǒng)上。
預(yù)編譯的二進制文件可以直接在Linux、OS X和windows系統(tǒng)上運行,當(dāng)然在linux和OS X系統(tǒng)你需要賦與其可執(zhí)行權(quán)限;在linux系統(tǒng)中也可以直接用yum安裝。
下載頁面:
https://stedolan.github.io/jq/download/
在知道jq命令之前,我在linux系統(tǒng)中極少直接去命令去處理json數(shù)據(jù),除非只是簡單地從中過濾某個字符串,那就用grep結(jié)合正則表達式來解決。
所以,掌握了jq命令,則可以讓linux命令和shell腳本在處理json數(shù)據(jù)時變得得心應(yīng)手。
jq簡明教程
例子文件
為了便于演示jq的功能,我們在文件json.txt中保存如下內(nèi)容:
cat json.txt [{"name":"站長工具","url":"http://tool.chinaz.com","address":{"city":"廈門","country":"中國"},"arrayBrowser":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]},{"name":"站長之家","url":"http://tool.zzhome.com","address":{"city":"大連","country":"中國"},"arrayBrowser":[{"name":"360","url":"http://www.so.com"},{"name":"bing","url":"http://www.bing.com"}]}]
為了讓你理解文件中的內(nèi)容,對比jq的效果,在json解析工具中顯示為:
最簡單的jq程序是表達式".",它不改變輸入,但可以將其優(yōu)美地輸出,便于閱讀和理解。
cat json.txt | jq '.' [ { "name": "站長工具", "url": "http://tool.chinaz.com", "address": { "city": "廈門", "country": "中國" }, "arrayBrowser": [ { "name": "Google", "url": "http://www.google.com" }, { "name": "Baidu", "url": "http://www.baidu.com" } ] }, { "name": "站長之家", "url": "http://tool.zzhome.com", "address": { "city": "大連", "country": "中國" }, "arrayBrowser": [ { "name": "360", "url": "http://www.so.com" }, { "name": "bing", "url": "http://www.bing.com" } ] } ]
[index]
輸出列表中的第一個元素,可以使用[index]:
cat json.txt | jq '.[0]' { "name": "站長工具", "url": "http://tool.chinaz.com", "address": { "city": "廈門", "country": "中國" }, "arrayBrowser": [ { "name": "Google", "url": "http://www.google.com" }, { "name": "Baidu", "url": "http://www.baidu.com" } ] }
管道線 |
jq支持管道線 |
,它如同linux命令中的管道線——把前面命令的輸出當(dāng)作是后面命令的輸入。
如下命令把.[0]作為{…}的輸入,進而訪問嵌套的屬性,如.name和.address.city。
觀察如下幾個命令,通過改變|前后的輸入和輸出來達到不同的效果:
cat json.txt | jq '.[0] | {name:.name,city:.address.city}' { "name": "站長工具", "city": "廈門" } cat json.txt | jq '.[0] | {name:.arrayBrowser[1].name,city:.address.city}' { "name": "Baidu", "city": "廈門" } cat json.txt | jq ".[] | {name:.arrayBrowser[1].name,city:.address.city}" { "name": "Baidu", "city": "廈門" } { "name": "bing", "city": "大連" }
[]
如果希望把jq的輸出當(dāng)作一個數(shù)組,可以在前后加上[]:
cat json.txt | jq "[.[] | {name:.arrayBrowser[1].name,city:.address.city}]" [ { "name": "Baidu", "city": "廈門" }, { "name": "bing", "city": "大連" } ]
自定義key
在{}中,冒號前面的名字是映射的名稱,你可以任意修改,如:
cat json.txt | jq "[.[] | {name_001:.arrayBrowser[1].name,city_002:.address.city}]" [ { "name_001": "Baidu", "city_002": "廈門" }, { "name_001": "bing", "city_002": "大連" } ]
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何在Linux中重置MySQL或者MariaDB的root密碼
本篇文章主要介紹了如何在 Linux 中重置 MySQL 或者 MariaDB 的 root 密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03騰訊云服務(wù)器Centos掛載數(shù)據(jù)盤的方法
這篇文章主要介紹了騰訊云服務(wù)器Centos掛載數(shù)據(jù)盤的方法,參考了網(wǎng)上一些資料,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10Linux常用查看硬件設(shè)備信息命令大全(值得收藏)
本文是小編收藏整理的關(guān)于linux查看硬件設(shè)備信息的命名,非常不錯,值得收藏,需要的朋友參考下吧2016-12-12