jq 演练场
粘贴 JSON,写一个 jq 过滤器,即时看到结果。运行编译为 WebAssembly 的真正 jq,完全在你的浏览器中。
你的 JSON 由作为 WebAssembly 在你浏览器中运行的 jq 本地处理,绝不会上传,但请避免将机密或生产数据粘贴到任何工具中。
需要 JSONPath 而非 jq?试试 JSONPath 求值器。
关于 jq 演练场
这款 jq 演练场让你无需安装任何东西就能针对 JSON 运行 jq 过滤器。粘贴一个 JSON 文档,键入一个表达式,例如 .users | map(.name)、.[] | select(.active) 或 group_by(.type),结果会在你键入时出现。它是编译为 WebAssembly 的真正 jq 1.8.2,因此你在命令行上使用的同样的过滤器、函数和管道语法在这里都能工作,包括 map、select、sort_by、group_by、to_entries 和字符串插值。开启原始输出 (-r) 可让字符串结果去掉引号,或开启紧凑输出 (-c) 把每个值放在一行。jq 的编译和运行时错误都会显示,让你能快速修复过滤器。由于 jq 作为 WebAssembly 在页面内运行,你粘贴的 JSON 在你的设备上本地处理,绝不会上传到服务器。
功能特性
- 运行编译为 WebAssembly 的真正 jq 1.8.2,而非部分重新实现
- 在防抖变更上给出实时结果,外加一个「运行」按钮和 Cmd/Ctrl+Enter
- 原始输出 (-r) 开关,用于输出不带引号的字符串
- 紧凑输出 (-c) 开关,每个值占一行
- 从 stderr 呈现清晰的 jq 编译和运行时错误
- 可点击的示例过滤器(map、select、group_by、length、sort),一触即填入查询
- 一键复制输出
- WASM 仅在你首次运行过滤器时加载,之后保持预热
如何使用 jq 演练场
- 将你的 JSON 粘贴或键入到 JSON 框中。
- 在过滤器框中写一个 jq 过滤器,例如 .users | map(.name)。
- 观察输出更新,或按「运行」/ Cmd+Enter 立即求值。
- 如果你需要不同的格式,可切换原始 (-r) 或紧凑 (-c)。
- 点击「复制」以获取结果。
示例
输入
{
"users": [
{ "name": "Ada", "active": true },
{ "name": "Linus", "active": false }
]
}
输出
[
"Ada"
]
过滤器 .users | map(select(.active)) | map(.name) 仅保留活跃用户并返回他们的名字。
常见错误与故障排除
- jq 报告语法错误,例如「Unexpected end of input」或「unexpected token」。 — 检查过滤器中是否有不配对的括号或管道,例如 .[ 应该是 .[] 或 .[0];jq 会在运行前解析整个表达式。
- 「Cannot iterate over null」或「Cannot index ... with ...」。 — 该路径在你的数据上不存在。请使用可选访问,例如 .users[]? 或 .field // empty,并确认键名与你的 JSON 相符。
- 字符串输出仍然带着两侧的引号。 — 那是正常的 JSON 输出。开启原始输出 (-r) 即可输出不带引号的字符串,当你管道传给 shell 时通常正是你想要的。
- 尽管过滤器看起来没错,输出却是空的。 — 你的过滤器可能没有产生任何值(例如一个什么都没匹配到的 select)。先试一下恒等过滤器 . 以确认 JSON 能被解析,然后再逐步收窄。
常见问题
- 这运行的是真正的 jq 吗?
- 是的。它运行编译为 WebAssembly 的 jq,因此是真正的 jq 引擎,而非 JavaScript 的重新实现。这里的过滤器、内置函数和管道语义都与你在终端中运行的 jq 相符。
- 支持哪个 jq 版本?
- jq 1.8.2,通过 jq-wasm 构建。jq 1.8 中可用的函数和语法 —— 例如 group_by、to_entries、ltrimstr 以及用 \(...) 进行的字符串插值 —— 在这里都能工作。
- 原始 (-r) 和紧凑 (-c) 开关是做什么的?
- 原始输出 (-r) 打印字符串结果时不带两侧引号,对应 jq 的 -r 标志。紧凑输出 (-c) 将每个 JSON 值打印在一行上,而非美化输出,对应 jq 的 -c 标志。
- 我的 JSON 会被上传到任何地方吗?
- 不会。jq 作为 WebAssembly 在本页面内运行,因此你粘贴的 JSON 和你写的过滤器都在你的设备上本地求值,不会发送到服务器。
- 为什么第一次运行会稍慢一些?
- jq 的 WebAssembly 模块会在你首次运行过滤器时被下载并初始化,这就是你会看到短暂加载状态的原因。此后它会驻留在内存中,后续运行很快。
- 我可以运行带 select、map 和 group_by 的过滤器吗?
- 可以。像 .[] | select(.active)、.users | map(.name) 和 group_by(.type) 这样的表达式都能工作,jq 其余的过滤、转换和聚合函数也一样。
相关工具
全部 ArrayKit 工具