Linux 命令详解(十一)Shell 解析 json命令jq详解

前言

在自动化部署中涉及到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:~$
相关文章
相关标签/搜索