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 | length | 3 |
| 安全取值 | .store.car?.color | null(不报错) |
二、过滤与变换
| 目标 | 表达式 | 结果 |
|---|---|---|
| 条件过滤 | [.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) | add | 30.93 |
| 求极值 | .store.book | map(.price) | max | 12.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)] | length | 2 |
| 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 数据不出设备。