jq 入门:用命令行读懂 JSON 数据

举报
yd_290247903 发表于 2026/11/10 06:31:47 2026/11/10
【摘要】 调接口时,curl 返回的 JSON 常常挤成一行,很难一眼找到想要的字段。写 Python 脚本又要建文件、写导入、处理异常,只是临时看一眼数据,实在太重。jq 是轻量的命令行 JSON 处理器,输入 JSON,输出想要的那一部分,适合在终端随手使用。 安装 jqDebian 或 Ubuntu 用 sudo apt install jq,Fedora 或 RHEL 用 sudo dnf i...

调接口时,curl 返回的 JSON 常常挤成一行,很难一眼找到想要的字段。写 Python 脚本又要建文件、写导入、处理异常,只是临时看一眼数据,实在太重。jq 是轻量的命令行 JSON 处理器,输入 JSON,输出想要的那一部分,适合在终端随手使用。

安装 jq

Debian 或 Ubuntu 用 sudo apt install jq,Fedora 或 RHEL 用 sudo dnf install jq,macOS 用 brew install jq。运行 jq --version,能看到版本号即已就绪。

第一个命令

echo '{"name":"denny","age":40}' | jq .

点号表示原样输出整个输入,jq 会把一行 JSON 重新排版:

{
  "name": "denny",
  "age": 40
}

先用 jq . 看清结构,再决定取什么。

取字段

取顶层字段:echo '{"name":"denny","age":40}' | jq .name,得到 "denny"。嵌套对象一层层写下去:jq .user.name。数组下标从 0 开始:jq .items[0] 取第一个元素。想展开数组的每一项,用 .[]:jq .items[] 会逐行输出 "a"、"b"、"c"。

常用组合

和 curl 搭配最常见:

curl -s https://api.example.com/list | jq '.data.items[] | .title'

它取出每一项的 title,-s 让 curl 安静输出。-r 输出不带引号的原始字符串,适合交给下一个命令:jq -r .name 得到 denny。keys 列出对象的所有键,快速了解接口返回了什么:jq 'keys' 得到 ["age", "name"]。length 数个数:jq '.items | length' 得到 3。select 过滤记录:jq '.[] | select(.age > 30)' 只留下年龄大于 30 的那一条。

实战:筛出 error 日志

很多日志是一行一条 JSON,如 {"time":"10:02:10","level":"error","msg":"connect failed"}。一行命令挑出报错:

cat app.log | jq 'select(.level == "error")'

只看时间和信息时,再构造对象:jq 'select(.level == "error") | {time, msg}'。先过滤、再取字段,同样适用于接口返回和测试数据。

提醒:引号与 PowerShell

表达式要用单引号包裹,如 jq '.name'。用双引号时,Shell 会先解释 $、反引号等特殊字符,表达式还没到 jq 手里就变了样。PowerShell 里单引号本身就是字符串定界符,嵌套的 JSON 双引号容易冲突,可改用双引号并转义内部双引号,或先存成文件,用 Get-Content data.json | jq .name 处理。

掌握以上用法,日常看接口、查日志就够用了。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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