linux中json處理工具jq的安裝和使用
最近在使用shell寫自動化指令碼的時候涉及到對json檔案的配置和讀取,為了方便處理,於是封裝了乙個方法,通過使用jq工具來對json資料進行處理。
一、jq的簡介
jq是一款命令列下處理json資料的工具。它可以接受標準輸入,命令管道或者檔案中的json資料,通過一系列的過濾器和表示式的轉換後生成我們需要的資料結構並格式化輸出,這樣就方便我們在一大堆資料中方便的獲取到我們想要的資料,輕量便捷。
二、jq的安裝
jq可以通過系統自帶的軟體包管理器直接安裝,也可以手動從源**編譯安裝。jq的源**可以直接從git倉庫獲得,git倉庫位址是:具體的安裝命令如下:
在mac中可以直接通過brew install jq就可以了,不過需要先安裝了homebrew。
在linux和osx系統中:
git clone不過我在windows系統下嘗試過是無法這樣安裝的。cd jq
autoreconf -i
./configure –disable-maint ainer-mode
make
sudo make install
三、jq的使用
jq支援使用-h或者–help檢視jq的詳細使用方法。需要注意的是jq的輸入內容必須嚴格遵守json格式的標準,即所有的屬性必須是以雙引號包括的字串;物件的最後乙個屬性的末尾或者陣列的最後乙個元素的末尾不能有逗號,否則jq會丟擲無法解析json的錯誤。
jq通過命令列來控制對輸入輸出的處理。介紹幾個常用的命令列選項。
+ -r選項。該選項是輸出raw格式內容或json格式內容,即符合json標準格式。如我們要查詢乙個json字串中name的值,使用-r選項的時候返回的只有值,不會加上雙引號。
+ -s選項。jq可以同時處理空格分割的多個json字串輸入。使用-s選項,jq會將所有的json輸入放入乙個陣列中並在這個陣列上使用filter。
+ –arg選項。jq通過該選項提供了和宿主指令碼語言互動的能力。比如將乙個值繫結到乙個變數上,在後面的filter中可以直接通過變數引用到這個值。
四、基礎表示式
『.』符號:表示預設輸出。對作為表示式輸入的整個json物件的引用。五、常用功能json物件操作。jq提供了兩種基本表示式用來訪問json物件的屬性:『.< attributename >』和』.< attributename >?』。正常情況下,這兩個表示式的行為相同,都是訪問物件的屬性,如果json物件不包含指定的屬性則返回null。區別就是當輸入的不是json物件或者陣列時,第乙個表示式會丟擲異常。而第二個表示式則無任何輸出。
陣列操作。jq提供了三種基礎表示式來運算元組「
+ 迭代操作:(『.』)。該表示式的輸入可以是陣列或者json物件。輸出的是基於陣列元素或者json物件屬性值的iterator。
+ 訪問特定元素的操作(『.[index]』或』.[attributename]』)。用來訪問陣列元素或者json物件的屬性值。輸出的是單個值。
+ 陣列切片操作(『.[startindex:endindex]』)
表示式操作(』,』和』|』).表示式操作是用來關聯多個基礎表示式。逗號表示對同乙個輸入應用多個表示式。管道符表示將前乙個表示式的輸出用作後乙個表示式的輸入。當前乙個表示式產生的結果是迭代器時,會將迭代器的每乙個值用作後乙個表示式的輸入從而形成新的表示式。
假設我們有如下demo.json資料
,
],"address":
}
+ 格式化
假設我們要對請求某個介面返回的json資料進行格式化,則只需寫curl 「 -s | jq 『.』
根據json資料中的key獲取value,直接新增jq 『.key』即可。例如:echo 『』 | jq 『.name』
school
注意:當我們解析不存在的key時,會返回null
echo 『』 | jq 『.***』
null
內建函式
jq還有一些內建函式,如key,haskey是用來獲取json中的key元素的,如:
cat demo.json | jq 『keys』
[ 「name」,
「students」,
「address」
] has是用來判斷是否存在某個key
cat demo.json | jq 『has(「name」)』
true
cat demo.json | jq 『has(「***」)』
false
map函式
輸入:[1,2,3,4]jq表示式:jq -r 『map(.+1)』
輸出:[2,3,4,5]
linux的檔案處理工具
檔案檢視命令 cat,nl,tac,rev cat 命令 選項 e 顯示行結束符 n 對顯示出的每一行進行編號 a 顯示所有控制符 b 非空行編號 s 壓縮連續的空行成一行 more 分頁檢視檔案 d 顯示翻頁及退出提示 less 一頁一頁地檢視檔案或stdin輸出 檢視時有用的命令包括 文字 搜尋...
linux下字元處理工具grep,sed,awk
linux下寫shell指令碼基本上都會或多或少的處理一些瑣碎的文字處理,這其中就會使用到不同的文字處理工具或命令,與windows下的batch指令碼相比,linux的shell本身也是有一些字元處理的能力的,但是比較難記和使用,而且功能不夠強大,使用起來不是很舒服。下面來介紹一下linux中常用...
linux日誌分割處理工具logrotate
logrotate 程式是乙個日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新的日誌檔案,我們把它叫做 轉儲 我們可以根據日誌檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。logrotate 程式還可以用於壓縮日誌檔案,以及傳送日誌到指定的e mail logrota...