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

前言

在自动化部署中涉及到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:~$

 

时间: 2024-09-20 03:50:04

Linux 命令详解(十一)Shell 解析 json命令jq详解的相关文章

Android中gson、jsonobject解析JSON的方法详解_Android

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, ke

JavaScript处理解析JSON数据过程详解_javascript技巧

JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包. JSON的规则很简单: 对象是一个无序的"'名称/值'对"集合.一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟一个":"(冒号):"

Android中gson、jsonobject解析JSON的方法详解

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, ke

JavaScript转换与解析JSON方法实例详解_javascript技巧

本文实例讲述了JavaScript转换与解析JSON方法.分享给大家供大家参考,具体如下: json格式数据如下: var json = { 'jquery': [{ "id": "1", "type": "ASP.NET", "title": "JSON全解析"}] } alert(json.jquery[0].id); alert(json.jquery[0].type); aler

Linux系统SCSI磁盘扫描机制解析及命令详细介绍

  介绍 Linux系统扫描SCSI磁盘有几种方式?Linux新增LUN之后,能否不重启主机就认出设备?如果安装了PowerPath,动态添加/删除LUN的命令是什么?本文总结了Linux主机对磁盘设备进行重新配置的方式,并附加命令实例. 更多信息 Linux系统提供多重机制以重新扫描SCSI总线并重认系统中加入的SCSI设备.在2.4内核方案中,由于动态LUN扫描机制不具备一致性,往往需要中断I/O. 2.6内核里,LUN扫描有了显著改进并添加了动态LUN扫描机制.Linux目前缺乏像drvc

LINUX 101: 让你的 SHELL 更强大

在我们的关于 shell 基础的指导下, 得到一个更灵活,功能更强大且多彩的命令行界面 为何要这样做? 使得在 shell 提示符下过得更轻松,高效 在失去连接后恢复先前的会话 Stop pushing around that fiddly rodent! bash1 这是我的命令行提示符的设置.对于这个小的终端窗口来说,这或许有些长.但你可以根据你的喜好来调整它. 作为一个 Linux 用户, 你可能熟悉 shell (又名为命令行). 或许你需要时不时的打开终端来完成那些不能在 GUI 下处

一天一个shell命令 linux文件操作系列-ln命令详解_linux shell

里提示一下:ubuntu的翻译很多都是字面直译,存在很多问题,所以建议大家参照我这里的解释.当然本来也是有些赶文的嫌疑,望指正. 经常在linux上操作,有在不同的目录下切换某几个固定的命令,或者修改几个固定的文件,这时候,如果能在一个目录下就操作他们,会是一件多么轻松的事情.我们来看看链接命令ln 全称 ln 全称是link 顾名思义,这是一个建立一个链接.怎么去理解呢?它的功能类似于Mac OS的别名或者Windows的快捷方式, 删除不会影响文件本身. 说明:(直接看看斜体,就行了) 链接

一天一个shell命令 linux文本操作系列-tac,rev命令详解_linux shell

说明: tac和rev没有必然联系,唯一相同的是,他们是"反派".tac其实是cat的反写,cat正常输出,那tac就倒着输出,不过从行的最后一行输出,那rev呢?rev是每行的最后一个字母到第一个字母倒序输出. 简单实例 tac命令 文件过滤分割与合并 tac命令用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示. 语法 tac(选项)(参数) 选项 -a或--append:将内容追加到文件的末尾: -i或--ignore-interrupts:忽略中断信号. 参数 文

Zabbix监控之Linux命令行/Shell脚本解析json

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1684266 本文主要写了在Linux下如何用Shell脚本解析json数据,以便于在Zabbix中添加适合于业务应用的监控项. 为什么要使用json? json作为一种文本化的数据格式(文本化协议),符合UNIX编程的哲学,既符合透明性(透明性:设计可见,便于审查和调试)又符合文本性(文本性:数据应该保存为文本文件