HandyTools Hub

JSON 可视化

以交互式树形或表格浏览 JSON 数据

原始 JSON 是为机器设计的,而真实的 API 响应里,一个有用的值可能埋在三层、五层之下。JSON 可视化器能把任意数据变成可交互、可折叠的树,或一张扁平、可滚动的表格,并同时报告结构统计。它只接受标准 JSON,且完全在浏览器中运行,这让你在摸清陌生 API 响应或导出的配置文件时,可以方便地粘贴进来。

树视图与表格视图

树视图保留层级。对象和数组变成可展开的分支,标注其类型和子项数量,点击分支即可折叠或展开。当你还不了解数据结构时,应该用这个视图,因为它如实呈现嵌套。

表格视图把同一份数据扁平化为「键路径、值、类型」的行。它舍弃形状,换来一份可以自上而下直读的清单。当你大致知道要找什么、需要比较许多值时,或者想跨记录检查 null 和类型不匹配时,它是更好的选择。

统计在每次解析时计算一次,切换视图时保持不变。

如何可视化一份数据

  1. 把 JSON 粘贴进输入框并按「可视化」,或者如果面板已打开就直接粘贴并点击按钮。
  2. 如果文本解析成功,结果面板会出现,默认选中树视图。
  3. 展开你关心的分支,或切换到表格视图查看扁平列表。
  4. 读取右上角的统计行:最大深度、键数量和类型分布。
  5. 源数据一旦变化,重新粘贴并再次可视化。

不会向服务器发送任何内容。解析、扁平化和渲染都在页面内完成,因此内部或敏感的载荷永远不会离开你的机器。

解读统计面板

  • 最大深度 是最深的嵌套层级,用来标记比预期更分层的结构。
  • 键数量 统计对象键加数组索引,粗略反映载荷规模。
  • 类型分布 统计有多少叶子是字符串、数字、布尔值或 null,以及数组和对象各有多少。一个本应存放字符串的字段突然出现一连串 null,就是上游改动破坏了数据的明显信号。

实操示例

取这段输入:

{
  "user": { "id": 7, "admin": false, "tags": ["a", "b"] },
  "lastLogin": null
}

树视图把 user 显示为带三个键的对象,其中 tags 是 Array[2],可展开为 "a" 和 "b",lastLogin 为 null。

表格视图产生五行:

键路径值类型
user.id7number
user.adminfalseboolean
user.tags.0astring
user.tags.1bstring
lastLoginnullnull

统计显示最大深度 3、键数量 7,类型分布为 number: 1、boolean: 1、string: 2、null: 1。键数量为七,计入了 user、id、admin、tags、两个数组索引以及 lastLogin。

仅接受标准 JSON

解析器是 JSON.parse,非常严格。它拒绝单引号、不带引号的属性名、尾随逗号、注释,以及仅 JavaScript 才有的值 NaN、Infinity 和 undefined。带前导加号或前导零(0 本身除外)的数字也无效。如果文档失败,错误信息会报告第一个问题的位置,这通常是找出某个原本看不见的尾随逗号的最快方式。先让文本过一遍格式化器,往往能在它到达本工具之前就修好问题。

何时该换其他工具

可视化器用于理解形状,而非编辑或比较。一旦你知道载荷里有什么,其他工具能更好地完成下一步工作。

  • 需要统一缩进或快速修复语法时,用格式化器。
  • 有两份同一文档、需要看清环境之间哪些字段发生了变化时,用对比工具。
  • 结构足够扁平、可以载入电子表格时,用 JSON 转 CSV 转换器。
  • 想把一份有代表性的响应变成可据以校验的契约时,用 schema 生成器。

统计面板是一个自然的中转点:记下最大深度,以及任何出现意外 null 或错误类型的字段,然后换工具去修复或校验它们。在另一个标签页里工作时让载荷留在可视化器中,也意味着你永远不会看不到原始结构。

大数据与实用限制

查看器把数据保存在内存中并据此构建显示,因此几兆字节很轻松,几十兆字节则不行。树视图更重,因为每个容器都会变成一个可点击元素;表格视图更轻,但仍要为每个叶子值渲染一行。结果区高度上限为 600 像素并可滚动,这保持了页面可用,但也意味着你只能靠肉眼查找,而不是用过滤框。对于非常大的文件,提取一个有代表性的对象或数组,检查那一小片。

相关工具

常见问题

键数量统计具体包含什么?

它把每个对象键和每个数组索引都算作一项。一个包含一个对象属性、三个子键和一个两项数组的载荷会报告六个键,因为两个数组位置也算在内。这个数字衡量的是结构条目,而不是不同字段名的数量。

为什么表格视图显示 orders.0.total 这样的标题?

表格视图把层级压扁成点分隔的键路径。对象键用点连接,数组位置用数字索引,因此 orders 数组中第一个订单的 total 显示为 orders.0.total。这让深层嵌套的值能在单一列表里浏览,代价是隐藏了周围结构。

为什么我的 JSON 在编辑器里看着没问题,却被拒绝了?

工具使用浏览器的严格 JSON 解析器,它拒绝某些编辑器允许的便利写法:单引号字符串、不带引号的键、尾随逗号、注释、NaN、Infinity 和 undefined 都是非法 JSON。不确定时就粘贴 JSON.stringify 的输出。解析器的错误信息会指向第一个出错字符。

最大深度这个数字说明了什么?

它表示任何值到达的最深嵌套层级。根对象从深度 0 开始,它的直接属性是深度 1,每多一层嵌套加一。根级数组的计数方式不同,因为它的元素从深度 1 开始。用它来发现那些比你代码预期嵌套更深的 schema。

工具能处理 50 MB 的导出文件吗?

实际可用的范围在几兆字节以内。树视图会为每个对象和数组创建一个元素,因此非常大的文档即便面板能滚动,也会让浏览器变卡。处理大数据时,请用表格视图,它每个叶子值渲染一行,或者可视化一个有代表性的样本,再用命令行工具处理完整文件。

为什么空对象在表格视图里消失了?

扁平化只记录叶子值。一个没有键的对象没有叶子,因此不产生任何行,尽管树视图仍会把它显示为空对象。如果某个字段必须出现在扁平列表中,请用 null 而非空对象来显式表示缺失。

由 HandyTools Hub 团队审校 · 最后更新