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

摘要:
前言在自动化部署中涉及到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"},小菜刀!!!

前言

在自动化部署中涉及到shell脚本需要动态读取很多配置文件,最好是json格式。

更多jq信息:http://stedolan.github.io/jq/manual/

一、根据key获取value

语法:jq '.key'

1、单个值获取

www@TinywanAliYun:~$ cat d25341478381063d1c76e81b3a52e0592a7c997f.json | jq '.sign'
"d25341478381063d1c76e81b3a52e0592a7c997f"

2、JSON nested parse(嵌套解析)

www@TinywanAliYun:~$ cat d25341478381063d1c76e81b3a52e0592a7c997f.json | jq '.live_node_config.node1.ip'
"192.168.10.10"

注意: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可以获取完全一样的结果

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"

3、解析不存在的元素,会返回null

www@TinywanAliYun:~$ cat d25341478381063d1c76e81b3a52e0592a7c997f.json | jq '.live_node_config.node1.ip123'
null

二、jq的内建函数,如:keys,has

1、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"
]

2、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:~$

免责声明:文章转载自《Linux 命令详解(十一)Shell 解析 json命令jq详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇获取股票数据接口(腾讯)命令行方式登录PostgreSQL下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

windows下gVim(Vi/vim)基本使用:让你体会到什么才是真正的编辑利器

Vim 是一个Linux 平台上功能非常强大的编辑器,他是早年的Vi 编辑器的加强版。这个gVim 是windows 版的,并且有了标准的windows 风格的图形界面,所以叫g(graphical)Vim。我们可以将gvim 理解为vim(vi的加强版)图形化版本,其指令和用法都完全相同,所以可以參考vim的指令。这是一个国际版本,会根据安装的平台自动选...

Linux命令之sftp 安全文件传输命令行工具

用途说明 sftp命令可以通过ssh来上传和下载文件,是常用的文件传输工具,它的使用方式与ftp类似,但它使用ssh作为底层传输协议,所以安全性比ftp要好得多。 常用方式 格式:sftp <host> 通过sftp连接<host>,端口为默认的22,用户为Linux当前登录用户。 格式:sftp -oPort=<port&g...

Redis----windows下的常用命令二

Redis 是一个开源,高级的键值对的存储。它经常作为服务端的数据结构,它的键的数据类型能够是strings, hashs, lists, sets(无序集合) 和 sorted sets(有序集合).启动redis服务:redis-server.exe redis.windows.conf启用客户端:redis-cli.exe双击 redis-cli.e...

ElasticSearch7.6.2 search_phase_execution_exception

 环境:ElasticSearch7.6.2   报这个错误 先看看索引字段 的mapping,然后查看 ElasticSearch 后台运行日志。 如果报这个错误  bug Trying to create too many buckets. Must be less than or equal to: [10000] but was [10001]....

Linux(Ubuntu)设置环境变量(转载)

http://blog.csdn.net/wumingxing0228/article/details/6050175 环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell。对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell。对于UNIX,可能是CShelll。环境变量是通过Shell命令来设置的,设置好的环境变...

Ubuntu18.04.2 amd64编译安装libcurl支持https

1.准备工作,安装ssl库: sudo apt-get installopenssl sudo apt-get install libssl-dev 2.下载libcurl源代码: wget https://curl.haxx.se/download/curl-7.65.3.tar.xz 3.解压并进入源代码目录: tar xf curl-7.65.3....