jq 处理 JSON 入门:几个最常用的过滤写法
对接接口、看配置文件、从日志里捞字段时,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 别名,比每次临时敲一长串更稳妥。
掌握这几条,日常读接口、改配置、抽日志字段就够用了。更高级的函数和模块可以等真正需要时再查文档。
- 点赞
- 收藏
- 关注作者
评论(0)