Linux杂谈之jq命令
生活随笔
收集整理的這篇文章主要介紹了
Linux杂谈之jq命令
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一? ?JSON
(1)什么是json
1) JSON 是最常用的'配置'和'數據交換'格式之一,一種與'開發語言無關-->獨立于語言的文本格式'的、'輕量級'的數據存儲格式,全稱JavaScript Object Notation場景: 大量的系統'API接口'現在基本上都是以'JSON格式'顯示結果2) 一種數據格式的'標準規范-->事實標準',起初'來源'于JavaScript這門語言,后來隨著使用的廣泛,幾乎每門開發語言都有處理JSON的API3) 優點:易于人的'閱讀'和'編寫',易于機器'解析'與'生成'(2)數據類型
數據結構:Object-->'{}'、Array-->'[]'基本類型:string、number、true、false、null -->'6種'后續: null和'空串'的區別1) 一個'花括號'{},整個代表一個對象-->'object'-->里面的元素必須是'key:value'2) 一個'方括號'[],整個代表一個數組-->'array' -->數組元素可以是'上面的六種'、或者'[]'、'{}'-->'廣義上的單個元素'特點: 里面是一種'key:value'的存儲形式,它還有不同的'數據類型'來區分備注: 復雜的數據結構是'通過'{}、'[]'嵌套來'實現'的(3)基礎
key: 一般是'string'類型,用"雙引號"value:'任何'基本類型或數據結構細節: 最后一個'不要加逗號',加了會'出錯'(4)高級
核心:數據結構之間的'嵌套'很多時候,服務器返回的JSON都"不是一個扁平"的結構,而是'包含了各種嵌套'強調:一般'json結構'保持一樣理解: 類似于C的'struct'結構體,自己'自由'組合①? ??對象封裝數組
②? ??數組作為JSON根對象
③? ? 純數組中的對象帶有唯一key
④? ? 更一般形式
處理 JSON null 和空數組及對象
json從入門到精通
二? ?jq
在自動化部署中涉及到shell腳本需要'動態讀取'很多'配置文件',最好是'json格式'(1)各種語言處理json
Jackjson與FastJson區別
fastjson漏洞
(2)jq簡介
1) jq是一個'出色'的命令行'針對-->JSON處理器',提供了用于查詢、操作和使用JSON文件的大量功能,而且作為一個'命令行工具',可'配合UNIX管道'使用,'單行腳本'處理JSON2) jq可以對json數據進行'分片'、'過濾'、'映射'、'轉換';和sed、awk、grep等命令一樣,可以讓你'輕松'地把玩文本3) 它能'輕松地'把你擁有的數據'轉換成'你期望的格式,而且需要寫的程序通常也'比你期望'的更加簡短4) jq是用'C編寫','沒有'運行時依賴,所以幾乎可以運行在'任何系統'上5) 預編譯的二進制文件可以'直接在'Linux、OS X和windows系統上運行注意:jq'不是'曾經流行的'JS庫'Jquery的'縮寫'(3)jq安裝
jq官網
1) Debian、'Ubuntu'系:sudo apt-get install jq2) Redhat、'Centos'系:sudo yum install jq -->'7' 或 sudo dnf install jq -->'8'備注:當前'采用'-->'Centos7.7'3) openSUSE:sudo zypper install jq4) Arch:sudo pacman -Sy jq5) Mac OS:使用'Homebrew安裝'-->brew install jq5) Windows:使用Chocolatey NuGet或者直接下載'官方二進制包'chocolatey install jq源碼安裝
(4)jq實踐
①? json數據格式化
最'簡單'的jq程序是表達式".",它'不改'變輸入,但可以將其'優美地輸出',便于'閱讀'和理解 直接'格式化'打印+++++++++'所作的事情'+++++++++1)'首先'檢查json'語法格式' -->'不符合'則'報錯'2)'然后'格式'正確',會進行'format格式化'github api調用
curl -s -o example.json https://api.github.com/users/jianzhiwang/repos②? ? ?jq命令詳解
jq [options] filter [files]1) **options:** --version: 輸出'jq的版本信息'并退出 --slurp/-s: 讀入'整個輸入'流到一個'數組' --raw-input/-R: '不作為JSON解析',將每一行的文本作為字符串'輸出到屏幕' --null-input/ -n: 不讀取任何輸入,過濾器運行使用null作為輸入;一般用作'從頭構建JSON'數據 --compact-output /-c:使輸出緊湊,而'不是'把每一個JSON對象'輸出在一行' --colour-output / -C:打開'顏色'顯示 --monochrome-output / -M:關閉顏色顯示--ascii-output /-a: 指定'輸出格式'為ASCII-raw-output /-r : 如果過濾的結果是一個字符串,那么直接寫到標準輸出(去掉字符串的引號)2) **filter:** . : 默認'輸出' .foo: 輸出指定'屬性',foo代表屬性。 .[foo] : 輸出指定'數組元素',foo代表'數組下標' .[]: 輸出指定數組中'全部元素' , : 指定'多個屬性'作為過濾條件時,用'逗號分隔' | : 將指定的數組元素中的'某個屬性'作為'過濾條件'3) **files:**JOSN格式文件③? ? 直接取map的某個key對應的value
備注: 'map'可以理解為'object'-->元素是"key":"value"的形式④? ? 獲取第一個數組的元素
jq 的鍵查詢也支持'鏈式調用'⑤? ??獲取所有的數組元素
jq '.list[].meta' ceshi7.json[]中如果'為空'表示獲取所有的'數組元素' -->'有層級'過濾'多個值'-->'以逗號隔開'echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[0,1]備注: 多個鍵搜索,中間用'逗號'分開⑥? ? jq相關參數
uesr_name代表鍵,$name代表name這個變量即前面的okok,這個變量可以是'交互型'的 '-c'選項:該選項控制 jq 是輸出 'raw 格式'內容或 json 格式化'pretty'內容'-r'選項:去掉字符串的引號'"'⑦? ??重組
1) 數據重'組成數組'-->"[]" echo '{"a":1,"b":2,"c":3,"d":4}' | jq '[.a,.b]'2) 數據重'組成對象'-->"{}" echo '{"a":1,"b":2,"c":3,"d":4}' | jq '{"tmp":.b}'⑧? ? 管道線|
jq'支持'管道線 |,它'如同'linux命令中的管道線,把'前面命令的輸出'當作是'后面命令的輸入'eg:如下命令把'.[0]作為{…}的輸入',進而'訪問嵌套'的屬性備注:這里我們使用管道'過濾'并'構造'出meta對象補充: 也是'重組'細節: { key} -->'將key和key對應的value組成map' jq '.[0] | {name:.arrayBrowser[1].name,city:.address.city}'注意: '|'里面的'.'是相對于第一個[0]的?⑨? ??jq的內建函數
1)判斷
1、'has'是用來是判斷'是否存在'某個key-->'true'、'false'jq 'has("sign")'2)篩選?
jq 'select(.age > 24) | {name}' wzj.json{"name": "shuifeng" }3)計算 1
echo '{"a": 1 , "b": 2}'|jq '.a+100'1014)刪除json鍵
jq也支持從JSON對象中刪除鍵,'刪除后輸出'就'不包含'刪除key的JSON對象。刪除鍵使用del()函數,還是以wzj.json為例:jq 'del(.owner)' wzj.json結果中就不包括owner鍵了5)計算2?
jq可以映射值并在'每個值上'執行操作備注: 數組中的'每個鍵'進行映射并做數值計算'加2'echo '[1,2,3,4,5,6]' |jq 'map(.+2)'[3,4,5,6,7,8]⑩? ? 小結
1) 必須要在'命令行'下處理 JSON,強烈'推薦 jq'2) jq '不僅'可以滿足一般性的常見需求,更包括運算、內置函數、條件比較、 變量聲明、自定函數等'強大'功能總結
以上是生活随笔為你收集整理的Linux杂谈之jq命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《用莫比乌斯带巧解内接矩形问题:拓扑学的
- 下一篇: 江南科友 hac linux shell