这是什么
JSON5 是为手写文件设计的 JSON 扩展。它允许注释、尾逗号、不加引号的对象键、单引号字符串,以及几种更顺手的数字写法。Babel、一些打包工具和很多应用都接受 JSON5 或 JSONC(带注释的 JSON,tsconfig.json 和 VS Code 设置用的就是它)作为配置格式。
但很多解析器、接口和编程语言只接受严格的 JSON。这个转换器读取 JSON5 或 JSONC,输出任何 JSON 解析器都能接受的标准 JSON:所有键都用双引号,没有注释,没有尾逗号,数字都写成十进制。
怎么用
- 粘贴 JSON5 或 JSONC,上传
.json5、.jsonc或.json文件,或点 示例。 - 选择 缩进:2 或 4 个空格,或选 压缩 输出成一行。
- 选择
Infinity和NaN的处理方式:转成null、转成字符串,或者报错。 - 复制或下载生成的 JSON。
如果输入有语法错误,提示会给出行号和列号,可以直接跳到出错的位置。普通 JSON 也是合法的 JSON5,所以也可以用它检查文件能否解析,顺便重新缩进。
示例
下面这段 JSON5 配置:
// Server settings
{
host: 'localhost',
port: 0x1F90, // 8080
ratio: .5,
tags: ['api', 'v2',],
}
会变成这样的严格 JSON:
{
"host": "localhost",
"port": 8080,
"ratio": 0.5,
"tags": [
"api",
"v2"
]
}
注释被删除,键和字符串加上双引号,十六进制数字和省略了整数部分的小数改写成十进制,尾逗号被去掉。
会转换哪些内容
- 删除
//行注释和/* */块注释。 - 不加引号的键(如
port)和单引号字符串(如'localhost')改成双引号。 - 行尾用反斜杠续行的字符串合并成一个字符串。
- 十六进制(
0xFF)、省略整数或小数部分的小数(.5、5.)和显式正号(+3)改写成普通十进制数。 - 去掉对象和数组里的尾逗号。
- 同一个键出现两次时,和 JavaScript 一样取最后一个值。
常见问题
› JSON5 和 JSONC 有什么区别?
JSONC 是在 JSON 基础上加了注释(VS Code 里还允许尾逗号)。JSON5 走得更远:无引号键、单引号字符串、多行字符串、十六进制数字、省略整数或小数部分的小数,以及 Infinity 和 NaN。JSON5 是 JSONC 的超集,所以本工具两种都能读。
› 注释会保留吗?
不会。标准 JSON 没有注释语法,所以注释会被删掉。如果需要保留,请把 JSON5 文件作为源文件,再从它生成 JSON。
› Infinity 和 NaN 会怎么处理?
严格的 JSON 无法表示它们。默认转成 null,和 JavaScript 的 JSON.stringify 一样。也可以选择转成字符串,或者直接报错并指出具体路径。
› 数据会上传吗?
不会。解析和转换都在浏览器里完成,带密钥的配置文件不会离开你的设备。