在自動化部署中涉及到shell腳本須要動態讀取不少配置文件,最好是json格式。node
更多jq信息: http://stedolan.github.io/jq/manual/linux
1、根據key獲取valuegit
語法:jq '.key'github
一、單個值獲取web
www@TinywanAliYun:~$ cat d25341478381063d1c76e81b3a52e0592a7c997f.json | jq '.sign'
"d25341478381063d1c76e81b3a52e0592a7c997f"
二、JSON nested parse(嵌套解析)redis
www@TinywanAliYun:~$ cat d25341478381063d1c76e81b3a52e0592a7c997f.json | jq '.live_node_config.node1.ip'
"192.168.10.10"
注意:json 數組的鍵命名必須爲下劃線"_",不能爲"-",不然解析不了。如:shell
錯誤的命名json
"live-node-proxy-config": { "ip": "192.168.10.100", "user": "www", "pwd": "www123456" },
正確數組
"live_node_proxy_config": { "ip": "192.168.10.100", "user": "www", "pwd": "www123456" },
小菜刀!!!在這裏咱們能夠使用curl能夠獲取徹底同樣的結果websocket
www@TinywanAliYun:~$ curl -s 'https://www.tinywan.com/frontend/websocket_client/autoInstallConf' | jq '.live_node_config.node1.ip'
"192.168.10.10"
curl 的 -s 參數表示:靜默模式。不輸出任何東西,更多瞭解【curl命令】
在這裏若是不加該參數則會輸出文件下載進度,以下所示:
www@TinywanAliYun:~$ curl 'https://www.tinywan.com/frontend/websocket_client/autoInstallConf' | jq '.live_node_config.node1.ip'
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 636 0 636 0 0 2053 0 --:--:-- --:--:-- --:--:-- 2058
"192.168.10.10"
三、解析不存在的元素,會返回null
www@TinywanAliYun:~$ cat d25341478381063d1c76e81b3a52e0592a7c997f.json | jq '.live_node_config.node1.ip123'
null
2、jq的內建函數,如:keys,has
一、keys是用來獲取JSON中的key元素的,查找json中全部的鍵
www@TinywanAliYun:$ curl 'https://www.tinywan.com/frontend/websocket_client/autoInstallConf' | jq 'keys' [ "live-node-config", "live-node-proxy-config", "osscmd-config", "push-config", "redis-config", "sign" ]
二、has是用來是判斷是否存在某個key
www@TinywanAliYun:~$ curl 'https://www.tinywan.com/frontend/websocket_client/autoInstallConf' | jq 'has("sign")'
true www@TinywanAliYun:~$ curl 'https://www.tinywan.com/frontend/websocket_client/autoInstallConf' | jq 'has("sign2")'
false www@TinywanAliYun:~$