在终端里调接口,返回一大坨 JSON,光标在屏幕上乱窜,眼睛根本找不到那个字段。这种时候装个 jq 就够了。它是命令行里处理 JSON 的利器,格式化、取值、过滤都能一行搞定。

按发行版装

# Debian、Ubuntu
sudo apt update && sudo apt install jq

# CentOS、Rocky、Alma
sudo yum install jq
sudo dnf install jq

# Alpine
docker apk add jq

装完执行 jq --version 验证,能打印版本号就成功了。CentOS 7 的源里版本比较老,功能少的可以加 EPEL 源再装。

先看最常用的几个用法

curl -s https://api.example.com/user | jq .
curl -s https://api.example.com/user | jq '.data.name'
curl -s https://api.example.com/list | jq '.list[] | .id'
curl -s https://api.example.com/list | jq '.list | map(select(.status == "on")) | length'

第一个把整段 JSON 格式化输出;第二个按路径取字段;第三个遍历数组只输出 id;第四个过滤后计数。记住「竖线是管道,点表示当前节点」,就能拼出大部分需求。

处理常见的中文和特殊字符

jq 默认输出带引号和转义的字符串,取纯文本加 -r:

jq -r '.message'

中文如果不是原样显示而是 \u4e2d 这种转义,交给 jq 输出就行,它默认会还原。压缩输出用 -c,方便写进日志或者传参数。

装不上怎么办

  • 找不到软件包:先 apt update 刷新列表,旧系统可能需要换软件源。
  • 没网的内网机:下载官方的静态编译二进制,直接 chmod +x 放到 /usr/local/bin,不需要依赖。
  • 容器里想用:选带 jq 的基础镜像,或者在 Dockerfile 里加一步 apt install -y jq。
  • 命令写对却没输出:检查有没有加 -r 或者路径是不是写错,用 jq . 先整体看一眼结构。

顺带提一个容易忽略的点:jq 只负责解析,没法处理 JSON Lines 文件里一行一个对象的情况,那种要用 -s 或者逐行读取。