当前位置:首页>Linux>Linux 运维JSON处理神器:jq 超实用精讲

Linux 运维JSON处理神器:jq 超实用精讲

  • 2026-09-17 15:05:31
Linux 运维JSON处理神器:jq 超实用精讲
json处理是运维日常高频操作,api接口、应用配置、结构化日志大量采用json格式。传统grep、awk、sed等基于文本行的工具,难以精准解析结构化的json数据。
jq是命令行json处理神器,轻量化、易上手,支持格式化美化、字段提取、条件过滤、数据转换等复杂操作。
一、jq安装
jq命令一般系统都默认不安装,需要单独安装。在某些yum源中可能找不到,此时需要启用epel扩展源,下面以centos为例:
#安装yum扩展源yum -y install epel-release#刷新缓存并安装yum clean all yum makecacheyum -y install jq#查看jq版本jq --version
二、jq核心操作
1. JSON 格式化美化
压缩单行json自动格式为易读的多行缩进格式,是阅读配置、接口返回必备,其中“.”代表当前整个json数据本身。
#命令行临时格式化echo '{"name":"ops","ip":"192.168.2.10","status":"online"}' | jq .#本地文件格式化cat demo.json | jq .
2. 提取单层字段
#提取单层字段echo '{"name":"web1","ip":"192.168.2.10","port":8888}' | jq '.name'#提取嵌套字段echo '{"server":{"ip":"192.168.2.10","name":"web1"}}' | jq '.server.ip'
3. 纯文本输出(脚本中经常使用)
参数-r代表原始输出,避免引号影响脚本执行:
echo '{"test":"web1.com"}' | jq -r '.test'
4. 提取嵌套字段
echo '{"server":{"ip":"192.168.2.10","name":"web1","env":"test"}}' | jq -r '.server.ip'
适用于项目实施部署的场景。
三、数组处理
1. 遍历数组批量取值
jq -r '.[].hostname' demo.json
• . = 根节点
• [] = 遍历数组所有元素
• .hostname =取每个元素的 hostname字段
#同时提取服务器名称和ipjq -r '.[] | .hostname + "," + .ip' demo.json
2. 指定下标获取单条数据
jq -r '.[0]' demo.json
  • []表示数组
  • 0 是第一个元素的下标
3. 统计数组总条数
jq '. | length' demo.json
length:jq 内置函数,返回数组的元素个数 。
四、条件过滤筛选
1. 单条件筛选
#筛选在线服务节点jq '.[] | select(.status == "online")' demo.json
  • .[]:遍历数组里每一个对象
  • |:把每个对象传给下一个过滤条件
  • select(条件):只保留满足条件的对象
  • .status == "online":条件 = 状态是在线
2. 多条件组合筛选
#在线状态+端口大于8080jq '.[] | select(.status=="online" and .port > 8080)' demo.json
3. 筛选后精简输出指定字段
jq -r '.[] | select(.status=="online") | .ip' demo.json
五、结构化日志分析
在json文件筛选全部错误日志
cat app.log | jq -r 'select(.level=="error") | .message'
六、运维实用小技巧
1、JSON 压缩为单行
jq -c . demo.json
在传参或者归档的时候使用。
2. 安全传参(脚本标准写法)
state="offline"jq --arg val "$state" '.[] | select(.status == $val)' demo.json
在脚本的时候传参的时候用。

七、jq 核心参数速查表

以下命令,能覆盖 95%日常场景

-r      #原始纯文本输出,去除双引号-c      #压缩JSON为单行.       #格式化美化JSONselect  #条件过滤筛选--arg   #安全传递自定义变量

八、总结

  1. jq是解析json结构化数据无可替代的工具,完胜 grep/awk 普通文本解析;

  2. 可用于api调试、容器/docker/k8s 信息抓取、json日志分析、配置文件解析;

  3. 掌握格式化、字段提取、数组遍历、select 过滤、变量传参即可覆盖大部分运维日常场景;

  4. 后续可结合k8s、docker实战,实现容器容器元数据、pod信息快速筛选。

如果觉得文章对你运维工作有帮助,记得点赞加关注。
#运维 #linux运维#json解析#jq命令

最新文章

随机文章