jq 处理 JSON 入门:几个最常用的过滤写法

举报
yd_299387399 发表于 2026/11/03 22:51:59 2026/11/03
【摘要】 对接接口、看配置文件、从日志里捞字段时,JSON 几乎无处不在。用编辑器肉眼翻可以,数据一多就很吃力。jq 是一个专门处理 JSON 的命令行工具,安装简单,写法也直白。下面用几个最常见的场景,说明怎么快速把需要的字段抠出来。 一、安装与基本用法大多数 Linux 发行版可以直接用包管理器安装,例如 apt install jq 或 yum install jq。装好后,最简单的用法是把 J...

对接接口、看配置文件、从日志里捞字段时,JSON 几乎无处不在。用编辑器肉眼翻可以,数据一多就很吃力。jq 是一个专门处理 JSON 的命令行工具,安装简单,写法也直白。下面用几个最常见的场景,说明怎么快速把需要的字段抠出来。

一、安装与基本用法

大多数 Linux 发行版可以直接用包管理器安装,例如 apt install jq 或 yum install jq。装好后,最简单的用法是把 JSON 管道给它:

echo '{"name":"demo","count":3}' | jq .

末尾的点号表示「输出整个文档」。jq 默认会做漂亮的缩进,比一长串挤在一行的原文好读很多。

二、取字段与嵌套路径

用点号加字段名就能取值。嵌套对象用连续的点路径:

echo '{"user":{"id":7,"name":"Ada"}}' | jq '.user.name'
# 输出 "Ada"

如果某个键可能不存在,可以用问号避免报错:.user.email?。取数组元素用方括号下标,例如 .items[0] 取第一项。

三、遍历数组与筛选

对数组里的每一项做同样的操作,用 .[]。配合 select 可以按条件过滤:

cat users.json | jq '.[] | select(.active == true) | .name'

上面这段会输出所有 active 为 true 的用户名。如果只要一个数组结果,可以把过滤包在方括号里:[.[] | select(.score > 80)]。

四、改造输出结构

有时接口返回字段很多,本地只要两三列。可以构造一个新对象:

jq '{id: .user_id, title: .name}' item.json

也可以一次处理多条,输出 CSV 风格的文本,方便贴进表格:

jq -r '.[] | [.id, .name] | @csv' list.json

-r 表示 raw 输出,去掉字符串外面的引号。

五、小习惯

写复杂过滤时,先把完整 JSON 用 jq . 看清楚结构,再一步步加过滤条件。管道里每一步都可以单独试,出问题也容易定位。把常用过滤存成脚本或 shell 别名,比每次临时敲一长串更稳妥。

掌握这几条,日常读接口、改配置、抽日志字段就够用了。更高级的函数和模块可以等真正需要时再查文档。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。