首页 › 文本与开发 › JSON 格式化 / 压缩 / 校验

JSON 格式化 / 压缩 / 校验

粘贴 JSON 文本,格式化为 2 或 4 空格缩进,或压缩成一行;语法错误时给出行列位置。

JSON 与 JavaScript 对象字面量的区别

JSON 是一种独立于语言的数据交换格式,语法比 JavaScript 对象字面量严格得多。最常见的几个差别:键名必须用双引号包裹,{name: 1} 和 {'name': 1} 在 JSON 里都是非法的;字符串只能用双引号;对象或数组最后一个元素后面不允许尾逗号;不允许任何注释;数字不能以 0 开头(除单个 0)、不能是 NaN、Infinity 或十六进制;值不能是 undefined、函数或日期对象,日期只能写成字符串。接口返回“JSON 无效”时,绝大多数是这几个原因。

本工具的功能与错误定位

格式化使用浏览器内置的 JSON.parse 和 JSON.stringify,先解析再按 2 空格、4 空格或 Tab 重新缩进;压缩则去掉所有多余空白输出为一行,适合放进配置或请求体。校验只检查语法并显示顶层类型和键数量。

解析失败时,工具会从浏览器的报错信息中提取位置(Chrome 给出字符偏移,Firefox 给出行列),换算成行号和列号,并把出错行截取出来用 ^ 标出大致位置。如果浏览器没有提供位置,会用内置的简单扫描器找到第一个不符合 JSON 语法的字符。注意定位指向“解析器发现问题的地方”,真正的错误可能在它前面一点,例如缺少逗号时会指向下一个键。

所有处理在浏览器本地完成,接口数据和密钥不会上传。格式化后的数据中,超过 2 的 53 次方的大整数会丢失精度,这是 JavaScript 数值类型的限制,处理这类 ID 时请保持字符串形式。

常见问题

提示“Unexpected token”是什么意思?

解析器遇到了不符合 JSON 语法的字符,常见于单引号、尾逗号、注释或中文标点。按提示的行列检查附近内容即可。

为什么大数字格式化后变了?

JavaScript 用双精度浮点数表示数字,超过 9007199254740992 的整数会丢失精度。这类 ID 应在接口中以字符串传输。

键的顺序会改变吗?

不会。JSON.stringify 按对象属性插入顺序输出,与原文一致;只有纯数字形式的键会被排到前面,这是 JavaScript 引擎的规则。

能处理多大的 JSON?

几 MB 的文件在现代浏览器中可以正常处理,更大的文件建议使用命令行工具(如 jq)。