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 时请保持字符串形式。