ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

jq 完整使用指南:从零上手指令行 JSON 处理,5 分钟跑通第一个实战

jq 完整使用指南:从零上手指令行 JSON 处理,5 分钟跑通第一个实战 jq 完整使用指南从零上手指令行 JSON 处理5 分钟跑通第一个实战【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jqjq 是一款轻量级、跨平台的命令行 JSON 处理器专为结构化数据设计。它用可移植的 C 语言编写零运行时依赖能让你像使用 sed、awk、grep 一样对 JSON 数据做切片、过滤、映射和转换。无论是解析 API 响应、清洗配置文件还是处理日志jq 都能帮你省掉手写解析代码的大量时间。为什么 jq 值得装进你的终端在动手之前先花 30 秒看看它凭什么成为命令行里处理 JSON 的事实标准零运行时依赖单文件即用。jq 编译后就是一个独立可执行程序不需要安装任何运行时环境拷到服务器、容器、树莓派上都能直接跑省去了环境装不对的麻烦。管道语法一学就会。你如果用过 grep 或 awkjq 的表达方式会让你毫无陌生感|把表达式串起来数据从左往右流动5 分钟就能写出第一条实用命令。内置函数库开箱即用。map、select、group_by、sort_by、walk这些高频操作全部内置可以直接在 src/builtin.jq 里读到它们的实现不用现写循环。美化输出 顺手验证。jq .一行就能把压缩成一坨的 JSON 格式化成人能读的样子还顺带帮你检查 JSON 语法是否合法。那么具体怎么用下面按真实场景带你走一遍。快速上手5 分钟跑通你的第一条 jq 命令第一步安装 jq按你的环境选一种方式一次搞定# Ubuntu / Debian sudo apt update sudo apt install jq # macOS brew install jq # Windows任选其一 choco install jq # 或 scoop install jqWindows 用户也可以直接下载预编译的.exe文件改名为jq.exe后加入系统 PATH 即可。如果你需要定制编译比如关闭正则引擎可以从源码构建# 从源码编译高级用户 git clone https://gitcode.com/GitHub_Trending/jq/jq cd jq git submodule update --init autoreconf -i ./configure --with-onigurumabuiltin make -j8 sudo make install第二步验证安装在终端执行下面的命令看到版本号说明安装成功jq --version第三步写出第一条 jq 表达式把一段 JSON 通过管道传给 jq用.name提取字段。echo负责把示例数据喂给 jq.是 jq 最简单的表达式表示原样输出echo {name: jq, version: 1.8, tags: [json, cli]} | jq .预期输出jq 会自动加上缩进和换行即美化输出{ name: jq, version: 1.8, tags: [json, cli] }再试一条真正干活的——只取name的值echo {name: jq, version: 1.8} | jq .name输出带引号的字符串jq。加上-rraw output原始输出参数就能去掉引号直接得到纯文本jq——这在拼接 shell 命令时特别好用。恭喜你已经跑通了 jq 的核心工作流数据进管道 → 写表达式 → 拿到结果。场景实战三个高频用法场景一一键美化并提取 API 返回的 JSON痛点curl调用接口返回的 JSON 常常挤在一行里关键信息淹没在几十个字段中肉眼找值非常痛苦。做法把响应直接管道给 jq用点路径.a.b表示取对象 a 下的 b 字段精确定位。假设接口返回了最近 5 条提交记录jq 官方教程 docs/content/tutorial/default.yml 也是这么教的你只关心每条的提交者和信息curl -s https://example.com/api/commits?per_page5 \ | jq .[] | {author: .commit.author.name, message: .commit.message}.[]遍历数组里的每个元素{...}现场组装一个只含你要的新对象。效果原本几百行的原始响应变成 5 行整洁的提交者 信息摘要一眼看完。场景二从用户列表里筛出符合条件的数据痛点拿到一份几百人的 JSON 用户数组想知道哪些人是活跃状态手动翻文件不现实写 Python 脚本又太重。做法select是 jq 的过滤器select(条件)表示只放行满足条件的元素。假设users.json长这样[ {name: Alice, status: active}, {name: Bob, status: inactive}, {name: Carol, status: active} ]筛出活跃用户并只保留名字jq .[] | select(.status active) | .name users.json预期输出Alice Carol如果还想按名字排序后取前 3 名把sort_by和first/索引组合起来即可整条管道依然一行读完。效果过滤 字段裁剪 排序全部在一条命令里完成结果可以直接再管道给wc -l、xargs等其它工具。场景三清洗嵌套配置只留你需要的字段痛点日志或配置里嵌套了三层对象你只需要最里面的两三个值或者反过来想把嵌套对象拍平成好检索的结构。做法pick函数实现在 src/builtin.jq可以按路径白名单式地只保留指定字段del则是它的反面用来删字段。比如从配置对象里只留database和portjq pick(.database, .port) config.json想删掉某个敏感字段再输出用jq del(.password) config.json对于嵌套太深、懒得一层层写路径的情况walk(变换)会把表达式递归应用到每一层配合map就能做整树改造例如把所有空字符串统一转成 nulljq walk(if . then null else . end) config.json效果脏数据进、干净数据出而且不用写任何临时脚本文件。进阶技巧榨干 jq 的能力自定义函数def。写过的逻辑可以封装成函数复用例如def active: select(.status active);之后直接jq .[] | active即可。变量$x。用as $x把中间结果存起来避免重复计算.[] as $user | .name, $user.email。正则三件套test(...)判断是否匹配、match取匹配位置、capture直接按命名分组提取成对象处理JSON 里套了个字符串需要再拆的场景很顺手。多文件合并。jq -sslurp全部读入会把管道里的所有 JSON 值收集成一个大数组jq -s add可以一行求总和。模块化组织。复杂的 jq 程序可以拆成模块文件用module {version: 1.7};声明版本可以参考仓库里 tests/modules/a.jq 的写法便于团队协作复用。调试利器debug。表达式中间加| debug(msg:)会把中间值打到标准错误输出排查到底哪一步输出错了时非常高效。常见问题与避坑指南1.Cannot index object with string xxx报错怎么办这是新手最高频的坑jq 尝试访问一个不存在的键。两种解法——要么确认字段名拼写正确要么给路径加?安全导航取不到时安静地返回空而不报错jq .user.email? profile.json2. 字符串输出为什么总带引号jq 严格区分JSON 字符串和纯文本默认输出遵循 JSON 规范。想要裸文本就加-r反过来想压缩成一行方便存库或传参加-cjq -c .[0] data.json3. Windows 下jq不是可识别的命令先确认改名为jq.exe的目录已加入 PATH重开一个终端再试。另外注意 shell 引号差异CMD 和 PowerShell 里对单双引号的处理不同遇到表达式解析报错时优先把整个 jq 程序用单引号包住。4. 输入不是单个对象而是多行多个 JSON 值jq 默认按JSON 流逐个处理这正是它设计上的优势不需要先合并jq ...对每个值分别执行表达式。想强制收集成数组再处理时用-s。5. 数字精度被改动jq 默认用十进制浮点显示数字超长精度数字可能看起来变了。这属于显示层面行为对绝大多数运维和数据场景无影响遇到极端精度需求时查阅 docs/content/manual/ 中的数字相关章节。延伸学习资源官方手册仓库内按版本组织的完整手册 docs/content/manual/manual.yml从基础语法到函数参考一应俱全。内置函数源码src/builtin.jq 里的每个def都配了注释是最好的函数用法定教材看不懂某个函数行为时直接读实现。官方教程docs/content/tutorial/default.yml 以真实 API 数据为素材从美化输出讲到路径提取是第二篇必读内容。测试套件tests/jq.test 用程序 / 输入 / 预期输出三行一组的格式覆盖了数百个边界用例BOM 头、Unicode 转义、浮点等想搞懂 jq 行为边界时可以照着做实验。社区支持遇到怪问题Stack Overflow 的jq标签和官方 Discord 社区是问人最快的地方。一句话总结jq 就是你终端里的 JSON 瑞士军刀装一次到处用一行命令顶一段脚本。现在就打开终端把最近收到的一份 JSON 数据丢进管道用你的第一条jq命令处理它——你会发现数据清洗这件事从未如此轻松。【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jq创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表