- 使用
Bun.JSON5.parse和Bun.JSON5.stringify解析和字符串化 JSON5 - 在运行时将 JSON5 文件作为模块
import和require(包括热重载和监视模式支持) - 在前端应用中使用 Bun 的打包工具
import和requireJSON5 文件
兼容性
Bun 的 JSON5 解析器使用 Rust 编写,并通过了 官方 JSON5 测试套件中的 100% 测试。翻译后的测试套件列出了每个测试用例。运行时 API
Bun.JSON5.parse()
将 JSON5 字符串解析为 JavaScript 值。
支持的 JSON5 特性
JSON5 是基于 ECMAScript 5.1 语法的 JSON 超集。它支持:- 注释:单行(
//)和多行(/* */) - 尾随逗号:对象和数组中
- 未加引号的键:任何有效的 ECMAScript 5.1 标识符
- 单引号字符串:除了双引号字符串之外
- 多行字符串:使用反斜杠进行换行延续
- 十六进制数:
0xFF - 前导和尾随小数点:
.5和5. - Infinity 和 NaN:正数和负数
- 显式加号:
+42
错误处理
如果输入不是有效的 JSON5,Bun.JSON5.parse() 会抛出 SyntaxError:
Bun.JSON5.stringify()
将 JavaScript 值序列化为 JSON5 字符串。
美化输出
传入space 参数来格式化输出并缩进:
space 参数可为数字(空格数)或字符串(用作缩进字符):
特殊值
与JSON.stringify 不同,JSON5.stringify 会保留特殊数值:
模块导入
ES 模块
可以直接将 JSON5 文件作为 ES 模块导入:config.json5
默认导入
app.ts
命名导入
可以将顶层属性作为命名导入进行解构:app.ts
CommonJS
也可以在 CommonJS 中使用require 导入 JSON5 文件:
app.ts
JSON5 热重载
当你使用bun --hot 运行应用程序时,Bun 会在 JSON5 文件发生更改时重新加载它们:
config.json5
server.ts
terminal
打包工具集成
使用 Bun 进行打包时,导入的 JSON5 文件会在构建时解析,并作为 JavaScript 模块包含在内:terminal
- 生产环境中无需承担运行时 JSON5 解析开销
- 更小的打包体积
- 对未使用的属性进行摇树优化(命名导入)