前面
jq是一個輕量級但是賊靈活的命令行json處理器.jq在json數據處理中很有用就像用awk處理文本一樣。jq最簡單的應用應該是解析json文件格式化輸出數據吧。有些網站如:json.cn 就是用來在線解析json以一個友好的格式返回給用戶查看。解析網站對於簡單的json數據使用較為良好,不過對於比較的大的文件就不行了。畢竟你打要開json文件,然后復制到網站上,如果文件太大,還可能卡頓一下。不過jq很強大,你可以設置各種命令,返回你想要的結果。本文簡單講解下jq比較常用的操作。
安裝
jq支持Linux,OS X,Windows等系統。Debian和Ubuntu安裝用sudo apt-get install jq
就行了。其它的系統安裝可以去查看:https://stedolan.github.io/jq/download/
基本使用
jq '.'
這里我用的系統是Ubuntu 16。現在這有一個json文件,但是里面的格式不規范。我們需要查看里面的內容:
使用jq
之后就不一樣了,'.'
表示當前輸入的內容:
jq '.foo[:1]'
/ 索引切片
可以看出jq
支持管道,也可以直接用文件,命令:jq '.' type73.json
, 可以通過'.key'
來獲取這個key的內容,如果key 的值是數組,可以用索引值來指定某個值,也支持切片操作。如:
jq '.foo, .bar | .[1]'
/多個過濾,管道操作
使用 ','
可以同時利用多個表達式過濾,支持管道操作,jq '.A | .B'
:以前一個的輸出作為后一個的輸入。如:
jq '[.foo[1], .bar[1]]'
構建新數組
利用 []
可以將不同key下的值構建一個新的輸出
jq '{new_f: .foo, new_b: .bar}'
構建新對象
jq '[.foo[1], .bar[1]]' > filter.json
將過濾后的數據保存
利用 >
將數據轉到新的文件里:
內置的操作和函數
jq
內置有一些運算操作符支持加減乘除等,和一些內置函數,使之更靈活和強大。
加減乘除
注意加減乘除的需要類型一樣,同樣是數組,或者標量,或者對象:
map / map_values
可以用map對每個數組的元素進行操作,map_values用於對象的values操作:
刪除某個元素
可以通過key,刪除,也可以指定索引值刪除: jq '.one.sn | del(.[1])' type73.json
, 程序運行后是返回的刪除后的內容
挑選指定條件內容
select(boolean_expression)
通過布爾表達式挑選指定內容
注意事項
jq不能正確解析,key 值為 數字字符串的內容。比如: {“1”: 123, “2”: “abc”},jq '.2' file.json
就不能正確的解析。
最后
jq還有許多內置函數, 還支持if,else條件語句,能作比較,支持一些數學運算,正則表達式等等。總之很實用也強大,這里寫不完。更多的可以去官網查看。很詳細的!
參考
https://stedolan.github.io/jq/manual/#ConditionalsandComparisons