news 2026/9/3 9:18:14

jq 命令行 JSON 处理实战指南:从安装到搞定真实接口数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
jq 命令行 JSON 处理实战指南:从安装到搞定真实接口数据

jq 命令行 JSON 处理实战指南:从安装到搞定真实接口数据

【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jq

处理嵌套 JSON 最痛苦的,从来不是"读不懂",而是"取不到":接口返回几千行,你只想要其中一个字段;日志里混着几十个 JSON 对象,你想把它们挑出来算个总和。jq就是干这个的——一个命令行 JSON 处理器,你给它一句简短的"查询语句",它就帮你把数据挑出来、算出来、变形成你要的样子。

装好它之后,你会发现很多以前要写十行 Python 的场景,一条命令就够了。

三分钟装好,跑通第一条命令

jq 是纯 C 写的,没有运行时依赖,装上就能用。

包管理器是最快的路:

# Debian/Ubuntu sudo apt install jq # macOS brew install jq

想自己编译也行,仓库地址是 https://gitcode.com/gh_mirrors/jq/jq ,clone 下来按 README 里的步骤./configure && make即可。

装完先验证一下,再跑第一条真正的命令:

echo '{"name":"Alice","age":30}' | jq '.name'

输出就一行:"Alice"。重点看这个引号——它告诉你输出的是 JSON 字符串,不是裸文本。

先认识两个最常用的开关:-r 和 -c

jq 默认输出是"标准 JSON 风格"的:字符串带引号、对象展开成多行。实际干活时经常想要更干净或更紧凑的结果,两个开关各解决一半:

-r(raw output)去掉字符串的引号,适合直接当普通文本用:

echo '{"msg":"hello"}' | jq -r '.msg'

输出是hello,没有引号。

-c(compact output)把多行对象压成一行,方便管道传给下一个程序:

echo '[{"a":1},{"b":2}]' | jq -c '.[0]'

输出{"a":1},单行,直接| 传给下一层不串行。

字段路径怎么写:jq 的"寻路"语法

jq 的过滤器本质上就是在描述一条取值路径,记住三种写法就能覆盖八成场景:

  • .name:取字段
  • .users[0].users[].id:下标遍历
  • .["weird-name"]:字段名带连字符时

比如一个接口返回用户列表,你要所有人的邮箱:

echo '{"users":[{"id":1,"email":"a@x.com"},{"id":2,"email":"b@x.com"}]}' \ | jq '.users[].email'

输出两行带引号的邮箱。如果字段可能不存在,加个?就不会报错而是返回nulljq '.missing?'

干两件事真实的事:筛选和求和

筛选select,它接收一个条件表达式,满足才输出:

echo '[{"name":"Ada","age":34},{"name":"Zoe","age":16}]' \ | jq -r '.[] | select(.age >= 18) | .name'

只输出Ada。注意中间那根|:它把上一步的结果喂给下一步,这就是 jq 全部"循环逻辑"的来源——不用写 for,管道串起来就行。

统计则把数组拍平再聚合:

echo '[{"price":29.9},{"price":5.5}]' | jq 'map(.price) | add'

输出35.4map负责提取每个元素的价格,add负责加总,两词完事。

传参数给 jq 程序:--arg

写脚本时,值往往来自外部变量。用--arg传字符串、--argjson传 JSON 值,程序里用$名字引用:

jq -n --arg city 杭州 '{city: $city, visited: true}'

输出{"city":"杭州","visited":true}。这里-n表示不读任何输入、以null起步,适合"凭空造一个 JSON"的场景。

两个细节:字符串参数永远按字符串处理,不会被 shell 引号干扰;而--argjson传入的必须是合法 JSON,传个裸数字就会报错——这正是它防呆的地方。

把过滤器存成文件,脚本化用起来

写到十几行的过滤器还塞在 shell 命令里就很丑了。jq 支持把程序放进文件,用-f执行:

jq -f filter.jq data.json

复杂逻辑(比如先def一个自定义函数再复用)都该这么放。自定义函数和try/catch错误处理,官方手册里有完整章节可以查:docs/content/manual/manual.yml 。

还有两个值得知道的小开关:

  • -S:按键名字母序输出对象,方便做文件 diff
  • -e:输出结果为falsenull时返回非零退出码,适合写"这个字段存在吗"的判断逻辑
echo '{"token":"abc"}' | jq -e '.token' >/dev/null && echo "有 token"

下一步去哪

  • 语法拿不准时,先jq --help看一眼全部选项,比翻手册快
  • 想动手试错又不想改本地文件,官方手册里描述的过滤器模型(manual 首页)值得通读一遍
  • 仓库里的tests/jq.test本身就是一本"示例集",里面是维护者长期验证过的真实用例,照着读比看教程见效更快
  • 遇到"这个数组怎么拍平""怎么合并两个对象"这类具体问题,直接搜 builtin.jq 里的内置函数名,每个函数都是文档

【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jq

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 10:16:15

【单片机课程设计/毕业设计】基于单片机的 TDS 电导率检测与手机 WiFi 监控终端设计 基于 STM32 或 51 单片机的多传感器水质监测与阈值可控控制系统设计(021505)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/3 9:18:14

AI Agent驱动软件自主进化:从大模型到工程实践

最近在AI编程领域,一个名为“AI从零写出25万行C编译器”的项目引发了广泛讨论。这听起来像是科幻情节,但背后指向的是一个更宏大的趋势:利用大模型驱动的AI Agent,让软件项目具备“持续自主进化”的能力。对于开发者而言&#xff…

作者头像 李华
网站建设 2026/9/1 10:13:54

OpenSandbox接入Gemini CLI:谷歌AI编码工具的沙箱化实践完整指南

OpenSandbox接入Gemini CLI:谷歌AI编码工具的沙箱化实践完整指南 【免费下载链接】OpenSandbox Secure, Fast, and Extensible Sandbox runtime for AI agents. 项目地址: https://gitcode.com/GitHub_Trending/ope/OpenSandbox OpenSandbox 是一个面向 AI 应…

作者头像 李华
网站建设 2026/9/1 10:12:25

GIS数据格式转换:从Shapefile到地理数据库的完整指南

在GIS数据处理工作中,我们经常需要在不同格式的地理空间数据之间进行转换。Shapefile(shp)作为最经典的矢量数据格式,因其简单通用而被广泛使用。然而,当项目需要更高效的数据管理、更复杂的属性关系或需要与特定软件&…

作者头像 李华
网站建设 2026/9/2 15:32:13

2025年NAS选购指南:从群晖到极空间,家庭数据中心如何选?

2024年,NAS市场经历了一场静水深流的变革。如果你还在用“网络硬盘”的旧眼光看待它,可能已经错过了家庭数据中心的真正价值。过去一年,从老牌巨头群晖、威联通,到国产新锐飞牛、极空间、绿联,再到老牌存储厂商铁威马&…

作者头像 李华
网站建设 2026/9/1 10:11:28

基于RAG的课程资料问答助手:从零搭建智能体应用

课程资料问答助手是AI编程与智能体开发课程中非常典型的一个综合案例。学生在学习过程中经常需要快速查找教材、课件和实验指导书中的知识点,但课程资料以PDF、Word、Markdown、PPT等多种格式分散存放,人工检索效率低,直接问通用大模型又往往…

作者头像 李华