JSON
是一種輕量級的數據交換格式。其採用完全獨立於語言的文本格式,具有方便人閱讀和編寫,同時也易於機器的解析和生成。這些特性決定了 JSON
格式越來越廣泛的應用於現代的各種系統中。作為系統管理員,在日常的工作中無論是編輯配置文件或者通過 http
請求查詢信息,我們都不可避免的要處理 JSON
格式的數據。
jq
是一款命令行下處理 JSON
數據的工具。其可以接受標準輸入,命令管道或者文件中的 JSON
數據,經過一系列的過濾器(filters
)和表達式的轉後形成我們需要的數據結構並將結果輸出到標準輸出中。 jq
的這種特性使我們可以很容易地在 Shell
腳本中調用它。
作為一個標準的命令行工具,jq
支持-h
選項(或者長格式--help
)。通過該選項,我們可以看到 jq
的簡略的使用幫助。在 linux 系統中,我們可以通過 man
命令來查看 jq
詳細文檔。
jq
直接處理文件
# xxx.JSON 中是我們要處理的 JSON 數據,我們可以直接將文件名傳給 jq
shell> jq -r '.' xxx.JSON
# 或者由其他程序讀出文件內容,並傳給 jq
shell> cat xxx.JSON|jq -r '.'
需要說明的是 jq
只能接受 well form 的 JSON
字符串作為輸入內容。也就是說輸入內容必須嚴格遵循 JSON
格式的標準。所有的屬性名必須是以雙引號包括的字符串。對象的最後一個屬性的末尾或者數組的最後一個元素的末尾不能有逗號。否則 jq
會拋出無法解析 JSON
的錯誤。
-r
選項。該選項控制 jq
是輸出 Raw
格式內容或 JSON
格式內容。所謂的 JSON
格式是指符合 JSON
標準的格式。例如,假設我們要查詢JSON
字符串{"name":"tom"}中name
的值. 使用-r
選項時返回的是'tom'. 不使用-r 選項時,返回的是'"tom"' .返回值多了一對雙引號。
shell> jq -n '([1,2]|.[])+([4,6]|.[])'
5
6
7
8
shell> jq -n -r '[3,1,2]|sort'
[
1,
2,
3
]
shell> jq -n -r '[1,[2,3],4]|flatten'
[
1,
2,
3,
4
]