jq 命令处理 JSON 备忘

举报
didala 发表于 2026/11/04 11:02:51 2026/11/04
【摘要】 jq 命令处理 JSON 备忘接口返回一堆 JSON,用 jq 在命令行里直接取字段、过滤数组,比贴到编辑器里翻要快得多。下面是日常最常用的几招。 取字与数组取顶层字段用号,取数组元素用下标,组合起来一次写完:echo "{\"name\": \"demo\", \"tags\": [\"a\", \"b\"]}" | jq ".name"echo "{\"items\": [{\"id\...

jq 命令处理 JSON 备忘

接口返回一堆 JSON,用 jq 在命令行里直接取字段、过滤数组,比贴到编辑器里翻要快得多。下面是日常最常用的几招。

取字与数组

取顶层字段用号,取数组元素用下标,组合起来一次写完:

echo "{\"name\": \"demo\", \"tags\": [\"a\", \"b\"]}" | jq ".name"
echo "{\"items\": [{\"id\": 1}, {\"id\": 2}]}" | jq ".items[0].id"

想把结果去掉引号、直接当纯文本用,加 -r:

echo "{\"name\": \"demo\"}" | jq -r ".name"

过滤与映射

用 select 过滤数组元素,用 map 只保留需要的字段:

echo "[{\"id\": 1, \"ok\": true}, {\"id\": 2, \"ok\": false}]" | jq "map(select(.ok))"
echo "[{\"id\": 1, \"name\": \"a\"}, {\"id\": 2, \"name\": \"b\"}]" | jq "map({id, name})"

安装与检查

大多数发行版自带包管理器都能直接装,装完先确认版本,再拿一小段 JSON 试手:

jq --version
echo "{\"a\": 1}" | jq ".a"

如果命令不存在,先装再用,不要把 JSON 贴进在线工里解析,本地命令行处理敏感返回更稳妥。

输出格式

默认输出带缩进,适合人阅读;想压成一行、方便后续用 grep 再过滤,加 -c:

echo "{\"a\": 1, \"b\": 2}" | jq -c "."
echo "{\"a\": 1}" | jq -c "{a}"

反过来,拿到压缩成一行的返回想看清结构,直接 jq "." 能格式化输出,排查接口字段很好用。

常见坑

  • 字名带横线或数字开头时,不能直接用点号,要用 jq ".[\"my-key\"]" 这种方括号写法。
    • 组为空时 .[0] 会得到 null,先用 length 判断一下,避免下游脚本把空值当成正常结果。

      • 中文输出出现乱码时,先确认终端码和接口返回编码一,多数情况不是 jq 的问题,而是管道某一环的编码被改了。

      • 常用组合

      • jq length:数数组长度或对象键个数。
        • jq keys:列出对象的所有键。
          • jq .[]:把数组或对象的值逐个展开输出。
            • 管道里先用 curl -s 取接口,再接 jq,一眼看清返回结构。

            • 记住两点就够用:点号字段,select 做过滤;其余复杂的变换,基本都是这两招的组合。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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