Skip to main content
在 Bun 中,JSON5 与 JSON、TOML 和 YAML 一样,是一等公民。你可以:
  • 使用 Bun.JSON5.parseBun.JSON5.stringify 解析和字符串化 JSON5
  • 在运行时将 JSON5 文件作为模块 importrequire(包括热重载和监视模式支持)
  • 在前端应用中使用 Bun 的打包工具 importrequire JSON5 文件

兼容性

Bun 的 JSON5 解析器使用 Rust 编写,并通过了 官方 JSON5 测试套件中的 100% 测试。翻译后的测试套件列出了每个测试用例。

运行时 API

Bun.JSON5.parse()

将 JSON5 字符串解析为 JavaScript 值。

支持的 JSON5 特性

JSON5 是基于 ECMAScript 5.1 语法的 JSON 超集。它支持:
  • 注释:单行(//)和多行(/* */
  • 尾随逗号:对象和数组中
  • 未加引号的键:任何有效的 ECMAScript 5.1 标识符
  • 单引号字符串:除了双引号字符串之外
  • 多行字符串:使用反斜杠进行换行延续
  • 十六进制数0xFF
  • 前导和尾随小数点.55.
  • 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 解析开销
  • 更小的打包体积
  • 对未使用的属性进行摇树优化(命名导入)

动态导入

JSON5 文件也支持动态导入: