jq 速查卡:30 条常用表达式

一页装下日常最常用的 jq 表达式,按「访问 → 过滤变换 → 聚合 → 重塑输出」四类归置。每条都能复制到 jq 在线工具 对同一份 store/book 示例数据直接运行;不熟语法先看 jq 入门。

一、基础访问

目标表达式结果
原样输出.整份数据
取字段.store.bicycle.color"red"
取数组元素.store.book[0].title"Sayings"
取最后一个元素.store.book[-1].title"Moby Dick"
展开数组.store.book[]三个对象
列出对象键.store.bicycle | keys["color","price"]
数组长度.store.book | length3
安全取值.store.car?.colornull(不报错)

二、过滤与变换

目标表达式结果
条件过滤[.store.book[] | select(.price < 10)]低价的两本书
过滤后取字段[.store.book[] | select(.category == "fiction") | .title]["Sword of Honour","Moby Dick"]
逐项映射.store.book | map(.title)书名数组
重塑对象.store.book | map({t: .title, p: .price})只含两字段的对象数组
正则匹配[.store.book[] | select(.author | test("Waugh"))]匹配到的书
数组切片.store.book[0:2] | .[].title前两本标题
取后两项.store.book[-2:]最后两本书
去重[.store.book[].category] | unique["fiction","reference"]

三、排序、聚合与统计

目标表达式结果
求和.store.book | map(.price) | add30.93
求极值.store.book | map(.price) | max12.99
按字段排序.store.book | sort_by(.price)按价格升序
分组.store.book | group_by(.category)按分类分组的二维数组
分组计数[.store.book[].category] | group_by(.) | map({(.[0]): length})各分类数量
任意/全部.store.book | any(.price > 10)true
计数[.store.book[] | select(.price < 10)] | length2
reduce 累加reduce .store.book[] as $b (0; . + $b.price)30.93

四、结构重塑与输出

目标表达式结果
对象转键值数组.store.bicycle | to_entries[{"key":"color","value":"red"}, …]
键值数组转对象.store.bicycle | to_entries | from_entries还原对象
按路径取值getpath(["store","bicycle","color"])"red"
列出叶子路径.store.bicycle | [paths][["color"],["price"]]
压成一行.store.bicycle | tostring紧凑 JSON 字符串
现场构造对象{color: .store.bicycle.color}{"color":"red"}

动手跑一遍

点「填入示例」载入与本文一致的 store/book 数据,把任一表达式粘进输入框即可看到相同结果。引擎为官方 jq 1.8(WASM),全部本地执行。

常见问题

这份速查卡和站内工作台的速查卡有什么不同?

工作台内置的是 4 组「点击即填入」的可运行示例,偏快速上手。本页是 30 条按用途分类的清单,偏日常查阅。两者互补:想立刻验证某条就打开 jq 在线工具,想系统对照就留在这页。

示例结果基于什么数据?

全部基于一份 store/book 示例:store.book 含三本书(Sayings / Sword of Honour / Moby Dick),store.bicycle 为 {color:"red", price:19.95}。点 jq 在线工具的「填入示例」即得到同一份数据,可逐条复现。

表达式里的 < 和 > 在网页上怎么写?

速查卡里为便于阅读直接写作 `<`、`>`,粘贴进 jq 工具时原样使用即可(jq 的同名运算符本就是这两个符号);本页展示位置的转义只影响 HTML 渲染,不影响你复制的表达式语义。

这些表达式都能在浏览器里跑吗?

能。站内 jq 引擎是官方 jq 1.8 的 WASM 版本,支持 select / map / group_by / sort_by / reduce / to_entries 等全部常用内置函数;首次查询按需加载约 0.9MB 引擎,之后即时。

数据会被上传吗?

不会。所有表达式在浏览器本地 Web Worker 中执行,站点没有后端;只有首次从 CDN 拉取 WASM 引擎文件本身,你的 JSON 数据不出设备。

相关工具