JSON 格式化工具
什么是 JSON 格式化?
JSON 格式化工具会为压缩或混乱的 JSON 添加缩进、换行和清晰层级,使其更容易阅读和排查。JSON 常用于 API 响应、配置文件、日志、功能开关、测试数据和低代码集成,一个缺失逗号、错误引号或意外嵌套都可能导致解析失败。这个工具能帮助快速查看对象、数组、键、值和可能出错的位置,也可以在需要较小载荷时重新压缩。格式化不会改变数据含义,也不会自动验证业务 Schema;在生产接口中,字段类型、必填项、null 处理和版本契约仍需要单独检查。
使用方法
使用方法
- 在左侧输入框粘贴或输入 JSON 数据
- 选择缩进大小(2 空格、4 空格或 Tab)
- 点击「格式化」美化,或点击「压缩」去除空白
- 结果会自动显示在右侧,并附带语法高亮
- 点击「复制」或「下载」保存结果
JSON 校验说明
- 格式化可证明文本为合法 JSON,但不能证明数据符合业务 schema。
- 出现错误时,请根据提示的行号与列号检查是否存在单引号、末尾逗号、注释或未转义的控制字符。
使用场景
技术原理
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」模式以保留注释;严格模式下注释会被视为语法错误。