第一次用 jq 处理 JSON:先看结构,再取字段

举报
yd_299388016 发表于 2026/11/01 22:42:41 2026/11/01
【摘要】 第一次用 jq 处理 JSON:先看结构,再取字段接口返回的数据大多是 JSON,终端里直接打印出来经常是一大坨挤在一起的文本,找一个字段要翻半天。jq 是一个专门处理 JSON 的命令行小工具,先把数据格式化,再按字段名取值,比肉眼翻要快得多,也更不容易看错。 先把一团 JSON 展开假设接口返回了一段用户信息,字段里有姓名、年龄和一串订单。直接看原始输出,括号套括号,很难分清哪一层属于...

第一次用 jq 处理 JSON:先看结构,再取字段

接口返回的数据大多是 JSON,终端里直接打印出来经常是一大坨挤在一起的文本,找一个字段要翻半天。jq 是一个专门处理 JSON 的命令行小工具,先把数据格式化,再按字段名取值,比肉眼翻要快得多,也更不容易看错。

先把一团 JSON 展开

假设接口返回了一段用户信息,字段里有姓名、年龄和一串订单。直接看原始输出,括号套括号,很难分清哪一层属于谁。把数据通过管道交给 jq,只写一个点,jq 就会按层级缩进重新排版,对象、数组、键值一目了然。先看清结构,再动手取值,是用 jq 最重要的习惯。

取字段从点开始

jq 里取字段的写法很直观:点后面跟字段名,就是取这个字段的值。比如数据顶层有一个 name 字段,写 .name 就能拿到它。如果字段嵌套在对象里,就用点一级一级往下走,例如 .user.name。这种写法和平时读 JSON 的思路是一致的,结构看懂了,取值表达式基本就写出来了。

数组的处理也很直接。方括号加下标可以取某一项,例如 .orders[0] 是第一条订单;如果想把数组里每一项都展开,可以用 .orders[],jq 会逐条输出。先取数组,再取里面的字段,组合起来就是 .orders[].price,能一次拿到所有订单的价格。

只取想要的那一列

实际工作中很少需要整段数据,更多时候只要几个字段。jq 支持用花括号重新组装一个新对象,例如只保留姓名和订单总数,输出就干净很多。数据量大时,还可以先用 select 做过滤,只保留满足条件的记录,比如只看金额大于某个值的订单。先过滤、再取值,输出量立刻降下来。

两个新手常踩的坑

第一个坑是把 JSON 当成普通文本用 grep 去切。JSON 里换行和空格不固定,字段顺序也可能变化,文本切分今天能用,明天接口一改就断。jq 是按结构解析的,只要字段名没变,表达式就一直有效。

第二个坑是忘记给 jq 传合法的 JSON。如果上游命令输出里混进了日志或报错信息,jq 会直接报错退出。这时先单独看一眼原始输出,确认它是纯 JSON 再接管道,排错会快很多。

jq 不需要背很多语法。日常先记住三件事:一个点格式化看结构,点加字段名取值,方括号处理数组。把数据先展开、再按需取字段,接口返回再乱,也能很快找到想要的那一项。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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