ToolAct工具行动

JSON 格式化工具

JSON 输入
格式化输出
行数: 1字符数: 0字节数: 0
行数: 1字符数: 0

什么是 JSON 格式化?

JSON 格式化工具会为压缩或混乱的 JSON 添加缩进、换行和清晰层级,使其更容易阅读和排查。JSON 常用于 API 响应、配置文件、日志、功能开关、测试数据和低代码集成,一个缺失逗号、错误引号或意外嵌套都可能导致解析失败。这个工具能帮助快速查看对象、数组、键、值和可能出错的位置,也可以在需要较小载荷时重新压缩。格式化不会改变数据含义,也不会自动验证业务 Schema;在生产接口中,字段类型、必填项、null 处理和版本契约仍需要单独检查。

使用方法

使用方法

  1. 在左侧输入框粘贴或输入 JSON 数据
  2. 选择缩进大小(2 空格、4 空格或 Tab)
  3. 点击「格式化」美化,或点击「压缩」去除空白
  4. 结果会自动显示在右侧,并附带语法高亮
  5. 点击「复制」或「下载」保存结果

JSON 校验说明

  • 格式化可证明文本为合法 JSON,但不能证明数据符合业务 schema。
  • 出现错误时,请根据提示的行号与列号检查是否存在单引号、末尾逗号、注释或未转义的控制字符。

使用场景

在浏览器中直接检查 API 响应粘贴紧凑的响应体,用两空格、四空格或 Tab 展开嵌套的对象和数组。解析错误会在可能的情况下给出计算出的行号和列号,无需肉眼扫描整份文档就能定位格式问题。
为提交和代码审查准备 JSON当配置、测试夹具或翻译数据需要稳定的排版时,格式化工具按所选缩进生成确定性输出。反过来需要将同一数据粘贴到环境变量或请求字段时,可以切换到压缩模式。
在本地清除敏感数据解析器、格式化器、压缩器、复制和下载步骤全部在浏览器中运行,token、客户字段、内部功能开关和未发布的 API 结构都不会经过第三方美化工具。格式化只证明文档可解析,不证明数据符合业务契约,输出仍需对照 OpenAPI 或 JSON Schema 单独校验;同时注意大数值字段可能出现的静默类型转换。
逐字段对比两份 JSON 载荷用相同缩进分别格式化新旧两份响应,然后在 diff 工具中并排对齐,快速发现重命名的键、类型变更和 null 与缺失字段的差异。这比直接对比压缩 JSON 高效得多,尤其适合 Webhook 载荷——一个字段对调就会导致下游出错。
压缩后用于环境变量或 curl 请求切换到压缩模式,将大型配置块塞进单行环境变量、.env 文件或 curl --data 参数。之后请用目标解析器确认,因为部分 HTTP 客户端在处理超过几百 KB 的超长单行体时仍有问题。严格 JSON(RFC 8259)禁止尾随逗号和注释,当输入是 JSON5 或 HJSON 时,严格解析器会拒绝以 // 开头或以 ,] 结尾的行;此时请启用宽容模式或在格式化前去掉注释。超过 2^53 的大整数会因 JavaScript 的 IEEE-754 双精度表示而丢失精度。

技术原理

JSON(JavaScript Object Notation)由 RFC 8259 / ECMA-404 定义,其语法是 JavaScript 对象字面量的严格子集:字符串必须用双引号包裹,键名必须加引号,尾随逗号非法,注释被禁止。格式化器先用 `JSON.parse()` 将文档解析为宿主语言对象图,再通过 `JSON.stringify(value, replacer, indent)` 重新序列化,其中 indent 为数字(1-10 个空格)或字符串(`'\t'`)。解析阶段为 O(n),通常快于 stringify 阶段,因为输出构建需要分配新字符串。 数值处理遵循 IEEE 754 双精度规范:大于 `Number.MAX_SAFE_INTEGER`(2^53 - 1 = 9007199254740991)的整数会丢失精度,因此 `9007199254740993` 经过 round-trip 后变为 `9007199254740992`。类似 `0.1 + 0.2` 的小数运算在解析后解析为 `0.30000000000000004`。Unicode 字符串支持 `\uXXXX` 转义,包括代理对(`\uD83D\uDE00` -> 微笑表情);解析器会拒绝孤立的未配对代理。空白字符仅在字符串内部有意义——token 之间任意组合的空格、制表符、换行符、回车符解析结果完全相同。 常见的非标准扩展包括 JSON5(允许注释、尾随逗号、无引号键名)和 JSONC(VS Code 配置文件)。标准 JSON 不允许这些特性,`JSON.parse` 遇到时会抛出 `SyntaxError`。流式替代方案如 NDJSON(每行一个对象)和 JSON Lines 避免将整个文档加载到内存。对于深层嵌套输入,V8 栈限制(约 10,000 帧)会限制基于递归的解析器;生产环境解析器使用迭代状态机来突破此限制。

  • RFC 8259 / ECMA-404 语法——六种值类型(对象、数组、字符串、数字、true/false、null);字符串必须双引号;键名必须加引号;无尾随逗号;无注释。
  • `JSON.parse(text)` 以 O(n) 运行,遇到无效输入时抛出带有字符偏移量的 `SyntaxError`;`JSON.stringify(value, replacer, indent)` 生成 2-10 空格或 `'\t'` 缩进的格式化输出。
  • IEEE 754 数值精度:`Number.MAX_SAFE_INTEGER = 2^53 - 1`;超出此范围的整数会四舍五入到最近的可表示双精度值,因此聊天 ID 和 Twitter Snowflake ID 必须作为字符串传输。
  • Unicode `\uXXXX` 转义支持完整 BMP;非 BMP 字符需要代理对编码 `\uD83D\uDE00`;解析器按 RFC 8259 §8.2 的规定拒绝孤立的未配对代理。
  • 常见解析失败原因:单引号字符串(`'foo'`)、数组/对象最后一项后的尾随逗号、字符串内未转义的控制字符、未转义的反斜杠、缺少闭合的 `}`/`]`、开头的 BOM(`\uFEFF`)。
  • 循环引用会在 `JSON.stringify` 中抛出 `TypeError: cyclic object value`;使用带回调的 `replacer` 配合 WeakSet 来打破循环,或使用 `flatted` / `json-stringify-safe` 等库。
  • 非标准变体:JSON5(`.json5`,允许注释和尾随逗号)、JSONC(VS Code 配置文件)、NDJSON / JSON Lines(每行一个对象,适合流式处理)——均被严格的 `JSON.parse` 拒绝。

示例

对象示例

输入:
{
  "name": "ToolAct",
  "type": "web tool",
  "active": true
}

输出:以 2 空格缩进美化输出,键顺序保持稳定

数组示例

输入:[1,2,3,"a","b","c"]
输出:以 2 空格缩进格式化;数字保持数值类型,字符串保留引号

嵌套结构

输入:
{"user":{"name":"Alex","skills":["JavaScript","Python"]}}

输出:
{
  "user": {
    "name": "Alex",
    "skills": [
      "JavaScript",
      "Python"
    ]
  }
}
说明:嵌套对象和数组会递归缩进;可在工具栏选择缩进宽度

常见问题

格式化器的具体功能是什么?

重新格式化 JSON:可按指定缩进(2 或 4 个空格)美化输出,也可压缩为单行。解析过程中会同时校验合法性,语法错误会附带行列号。

为什么我的 JSON 被判为非法?

常见原因:尾随逗号(JS 允许,JSON 不允许);单引号字符串(必须是双引号);键名未加引号;含注释(// 或 /* */);括号缺失。本页会标出解析失败位置。JSON5 和 JSONC(带注释的 JSON)是 JSON 的超集——请使用相应的解析器处理它们。

会保留键的顺序吗?

JSON 规范规定键的顺序无意义,但大多数解析器在往返过程中会保留顺序。本工具保持插入顺序,这通常更利于查看可读 diff。

可以处理超大 JSON 文件吗?

现代浏览器能处理 10-50 MB 的 JSON,但编辑器可能会变卡。对于几百 MB 的文件,请使用流式解析器(jq 命令行、ndjson 系列工具);浏览器解析器会把整棵树加载进内存。

我的 JSON 会被上传吗?

不会。解析和格式化通过 JSON.parse 与 JSON.stringify 在浏览器内完成。粘贴的 JSON 不会被传输。

为什么大整数会丢失精度?

JavaScript 的 JSON.parse 使用 Number 类型,遵循 IEEE 754 双精度标准。超过 2^53 的整数会丢失精度(例如 9007199254740993 会被悄悄四舍五入)。如需 BigInt 或保留为字符串的解析,请使用自定义解析器,或在生成端预先把大整数标记为字符串。

JSONC(带注释的 JSON)怎么办?

严格 JSON 禁止注释。部分 IDE(如 VS Code 的配置文件)使用 JSONC,允许 // 与 /* */ 注释。本格式化器通常提供「JSONC」模式以保留注释;严格模式下注释会被视为语法错误。