关于此工具
JS 对象转严格 JSON 工具可将松散的 JavaScript 或 JSON5 风格的对象字面量修复为严格、有效的 JSON。它基于手写的分词器构建——从不使用 eval 或 new Function——因此在严格的内容安全策略下是安全的,也可安全地粘贴不受信任的文本。一切都在你的浏览器中运行。
它接受真正的 JSON 所拒绝的内容:未加引号的标识符键、单引号字符串、] 或 } 前的尾随逗号、// 行注释和 /* 块 */ 注释、十六进制(0xFF)、八进制和二进制字面量、前导加号和前导小数点的数字(+1、.5),以及 undefined、NaN 和 Infinity 这些值。键会用双引号重新加引号,字符串会被正确重新转义,注释和尾随逗号会被剥离,数字会规范化为普通的 JSON 数字。你可选择如何处理 undefined(转换为 null 或删除该键)和非有限数字(转换为 null 或抛出错误),然后该值会用 JSON.stringify 以你所选的缩进(2 个空格、4 个空格、制表符或压缩)重新序列化。
当输入无法解析时,工具会报告第一个语法错误及其行号和列号,让你快速找到问题。这与严格 JSON 格式化工具形成互补,后者只会拒绝松散的输入——这里的目标是将复制的控制台输出、配置片段和手动编辑的对象抢救为任何解析器都能接受的 JSON。
常见问题
它接受哪些松散的语法?
未加引号的键、单引号字符串、尾随逗号、// 和 /* */ 注释、十六进制/八进制/二进制数字、前导加号和前导小数点的数字,以及字面量 undefined、NaN 和 Infinity——这些是让复制的 JS 对象作为 JSON 无效的常见原因。
它使用 eval 来解析吗?
不。它使用手写的分词器和递归下降解析器,从不使用 eval 或 new Function,因此可在严格的内容安全策略下工作,并对不受信任的输入是安全的。它只会产生数据,从不运行代码。
undefined、NaN 和 Infinity 如何处理?
JSON 没有这些值。你可以选择:undefined 可以变为 null 或删除其键,NaN/Infinity 可以变为 null 或抛出错误。无论哪种方式都能让输出保持严格有效的 JSON。
输入无效时会怎样?
解析器会在第一个真正的语法错误处停止,并报告其发生的行号和列号,让你能定位并修复出错的字符,而不必猜测。