jq 是一个轻量级、灵活的命令行 JSON 处理工具,专为 Linux/Unix 系统设计,它类似于 sed、awk、grep 等文本处理工具,但专门针对 JSON 数据格式,支持复杂的查询、过滤、转换和格式化操作,无论是解析 API 返回的 JSON 响应、提取配置文件中的特定字段,还是批量处理 JSON 数据,jq 都能显著提升效率,本文将详细介绍在 Linux 系统中安装 jq 工具的多种方法,包括不同发行版的包管理器安装、源码编译安装及二进制包安装,并附上基本使用示例和常见问题解答。

通过包管理器安装(推荐方法)
大多数 Linux 发行版的官方软件仓库中已收录 jq,使用包管理器安装是最简单、最稳定的方式,不同发行版的命令略有差异,以下是常见系统的操作步骤:
Ubuntu/Debian 系统
Ubuntu 和 Debian 及其衍生版(如 Linux Mint)使用 apt 包管理器,安装步骤如下:
- 首先更新软件包列表(确保获取最新版本信息):
sudo apt update
- 然后直接安装 jq:
sudo apt install -y jq
- 安装完成后,验证版本:
jq --version
若输出类似
jq-1.6的结果,说明安装成功。
CentOS/RHEL 系统
CentOS、RHEL 及其衍生版(如 Rocky Linux、AlmaLinux)使用 yum 或 dnf 包管理器(CentOS 7+ 默认使用 yum,CentOS 8+ 及 RHEL 8+ 使用 dnf)。
-
对于 CentOS 7/RHEL 7 及更早版本:
首先需要安装 EPEL(Extra Packages for Enterprise Linux)仓库,因为 jq 不在基础仓库中:sudo yum install epel-release
然后安装 jq:
sudo yum install -y jq
-
对于 CentOS 8+/RHEL 8+ 及使用 dnf 的系统:
EPEL 仓库已默认集成,可直接安装:sudo dnf install -y jq
-
验证安装:
jq --version
Arch Linux 系统
Arch Linux 使用 pacman 包管理器,jq 在官方仓库中可直接安装:
sudo pacman -S -y jq # -y 表示自动确认依赖
验证安装:
jq --version
Fedora 系统
Fedora 使用 dnf 包管理器,jq 在基础仓库中,直接安装即可:
sudo dnf install -y jq
验证安装:
jq --version
openSUSE 系统
openSUSE 使用 zypper 包管理器,安装命令为:
sudo zypper install -y jq
验证安装:

jq --version
不同发行版安装命令汇总表
| 发行版系列 | 包管理器 | 安装命令 |
|---|---|---|
| Ubuntu/Debian | apt | sudo apt update && sudo apt install -y jq |
| CentOS/RHEL 7+ | yum/dnf | sudo yum install epel-release && sudo yum install -y jq(或 dnf) |
| Arch Linux | pacman | sudo pacman -S -y jq |
| Fedora | dnf | sudo dnf install -y jq |
| openSUSE | zypper | sudo zypper install -y jq |
通过源码编译安装
如果系统官方仓库中的 jq 版本过旧(如低于 1.6),或需要最新开发版,可从 GitHub 源码编译安装,以下是详细步骤:
安装编译依赖
编译 jq 需要安装 make、gcc、flex 和 bison 等工具,不同系统安装命令如下:
- Ubuntu/Debian:
sudo apt update && sudo apt install -y make gcc flex bison
- CentOS/RHEL:
sudo yum groupinstall "Development Tools" -y # 安装开发工具集 sudo yum install flex bison -y
- Arch Linux:
sudo pacman -S --noconfirm make gcc flex bison
下载源码
从 jq 的 GitHub 仓库(https://github.com/jqlang/jq)下载最新源码(以 1.6 版本为例):
wget https://github.com/jqlang/jq/releases/download/jq-1.6/jq-1.6.tar.gz
解压源码包:
tar -xzf jq-1.6.tar.gz cd jq-1.6
编译并安装
执行 configure 脚本配置编译选项,然后编译并安装:
./configure --prefix=/usr/local # 安装到 /usr/local(可选,默认已包含在 PATH 中) make -j$(nproc) # 使用多核编译(nproc 获取 CPU 核心数) sudo make install
编译完成后,验证安装:
jq --version
若输出 jq-1.6,说明源码编译安装成功。
通过二进制包安装
对于不支持包管理器的系统,或希望快速安装最新版本的用户,可直接下载预编译的二进制包,以下是通用步骤:
下载二进制包
根据系统架构(64 位为 amd64,32 位为 386,ARM 架构为 arm64 或 arm)从 GitHub 下载对应二进制包(以 Linux 64 位为例):
wget https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64
重命名为 jq:
mv jq-linux64 jq
添加执行权限并移动到 PATH
chmod +x jq # 添加可执行权限 sudo mv jq /usr/local/bin/ # 移动到系统 PATH 目录(如 /usr/bin 也可,但推荐 /usr/local/bin)
验证安装
jq --version
若输出版本号,说明安装成功。
基本使用示例
安装完成后,通过几个示例快速掌握 jq 的基本用法:
解析简单 JSON 字符串
假设有一个 JSON 字符串 {"name":"Alice","age":25,"city":"Beijing"},提取 name 字段:
echo '{"name":"Alice","age":25,"city":"Beijing"}' | jq '.name'
输出:

"Alice"
过滤数组中的数据
假设有一个 JSON 数组 [{"name":"Bob","age":30},{"name":"Charlie","age":25}],筛选年龄小于 30 的对象:
echo '[{"name":"Bob","age":30},{"name":"Charlie","age":25}]' | jq '.[] | select(.age < 30)'
输出:
{
"name": "Charlie",
"age": 25
}
格式化 JSON 数据
对于未格式化的 JSON 字符串(如 {"name":"Bob","age":30,"city":"Shanghai"}),使用 jq '.' 格式化输出:
echo '{"name":"Bob","age":30,"city":"Shanghai"}' | jq '.'
输出:
{
"name": "Bob",
"age": 30,
"city": "Shanghai"
}
处理 API 返回的 JSON
通过 curl 获取 GitHub API 用户信息,提取用户名和公开仓库数:
curl -s 'https://api.github.com/users/jqlang' | jq '.login,.public_repos'
输出:
"jqlang" 25
常见问题解答(FAQs)
问题 1:安装 jq 时提示“无法定位包”或“包不存在”,怎么办?
解答:
出现该问题通常有三个原因:
- 包管理器源未更新:执行
sudo apt update(Ubuntu/Debian)或sudo yum makecache(CentOS/RHEL)更新源后重试。 - 未启用 EPEL 仓库:对于 CentOS/RHEL 7 系统,需先安装 EPEL 仓库(
sudo yum install epel-release),再安装 jq。 - 系统版本过旧:部分旧版本系统(如 CentOS 6)官方仓库无 jq,建议通过源码编译或二进制包安装。
若仍无法解决,可尝试从 GitHub Releases 下载对应二进制包手动安装(参考本文“二进制包安装”部分)。
问题 2:如何使用 jq 处理嵌套的 JSON 数据?
解答:
jq 通过点号 表示层级关系,用 [] 访问数组, 访问对象,对于嵌套 JSON {"user":{"name":"Alice","contact":{"email":"alice@example.com","phone":"123456"}}}:
- 提取邮箱:
echo '{"user":{"name":"Alice","contact":{"email":"alice@example.com","phone":"123456"}}}' | jq '.user.contact.email'输出:
"alice@example.com" - 提取所有联系信息(email 和 phone):
echo '...' | jq '.user.contact' # 输出 contact 对象 echo '...' | jq '.user.contact.{email,phone}' # 提取 email 和 phone 字段 - 处理嵌套数组(如
[{"user":{"name":"Bob"}},{"user":{"name":"Charlie"}}]):echo '[{"user":{"name":"Bob"}},{"user":{"name":"Charlie"}}]' | jq '.[].user.name'输出:
"Bob"和"Charlie"(分行显示)。
通过灵活使用 、[]、select、map 等过滤器,可轻松处理任意复杂度的嵌套 JSON 数据。
本文详细介绍了在 Linux 系统中安装 jq 工具的多种方法,包括包管理器安装(推荐)、源码编译安装和二进制包安装,并提供了基本使用示例和常见问题解答,无论是日常运维还是开发调试,掌握 jq 都能高效处理 JSON 数据,建议根据系统环境选择合适的安装方式,并通过实践熟悉其核心功能。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30679.html