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:~$
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2016-10-17 FFPEG 转码记录------解决了有流,但是没有码率和FPS?