第一次用 jq 处理 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 不需要背很多语法。日常先记住三件事:一个点格式化看结构,点加字段名取值,方括号处理数组。把数据先展开、再按需取字段,接口返回再乱,也能很快找到想要的那一项。
- 点赞
- 收藏
- 关注作者
评论(0)