用 jq 从 JSON 里取出字段:过滤器怎么写、怎么确认
准备工作
安装 jq(如
brew install jq),jq --version有输出。步骤依据 jq 1.8 Manual,核实日期 2026-10-24;其他小版本过滤器大多兼容。[1]
准备样例:
echo '{"user":{"name":"Ada","age":36},"tags":["a","b"]}' > /tmp/demo.json
操作步骤
1、取出顶层对象里的嵌套字段
做什么:jq '.user.name' /tmp/demo.json
为什么:jq 程序是过滤器:输入 JSON,输出结果。手册 Basic filters 说明 .foo 取字段。[1]
怎么确认:stdout 打印 "Ada"(带引号的 JSON 字符串);退出码 0。
2、构造新对象
做什么:jq '{n:.user.name, t:.tags[0]}' /tmp/demo.json
为什么:可以用对象构造式挑选字段,便于把接口响应收成自己要的形状。手册在 Types and Values / 构造相关章节说明对象与数组字面量。[1]
怎么确认:输出类似 {"n":"Ada","t":"a"};字段名与值符合表达式。
3、对数组做 map
做什么:jq '.tags | map(ascii_upcase)' /tmp/demo.json
为什么:管道把前一步输出送入下一过滤器;map 对数组每个元素应用表达式。手册 Builtin operators and functions 覆盖 map 等。[1]
怎么确认:得到 ["A","B"];若 tags 不是数组会报类型错误——这是预期,用于发现数据结构假设错了。
4、从文件与 stdin 两种方式跑同一过滤
做什么:cat /tmp/demo.json | jq '.user.age'
为什么:手册 Invoking jq 说明可从 stdin 读入,方便接 curl。[1]
怎么确认:输出 36;与直接 jq '.user.age' /tmp/demo.json 一致。
注意事项
壳层会吃引号:复杂过滤器建议用单引号包住 jq 程序。
大数据用流式选项前先读手册 Streaming,避免一次性吃爆内存。
来源
[1] jq Manual · https://jqlang.github.io/jq/manual/ · 核实于 2026-10-24
#jq #JSON #命令行 #教程 #前端