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

一致性

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

运行时 API

Bun.JSON5.parse()

将 JSON5 字符串解析为 JavaScript 值。

支持的 JSON5 特性

JSON5 是基于 ECMAScript 5.1 语法的 JSON 超集。它支持:
  • 注释:单行(//)和多行(/* */
  • 尾逗号:在对象和数组中
  • 未引用的键:任何有效的 ECMAScript 5.1 标识符
  • 单引号字符串:除了双引号字符串外
  • 多行字符串:使用反斜杠续行
  • 十六进制数字0xFF
  • 前导和尾随小数点.55.
  • Infinity 和 NaN:正数和负数
  • 显式加号+42

错误处理

Bun.JSON5.parse() 在输入无效 JSON5 时抛出 SyntaxError

Bun.JSON5.stringify()

将 JavaScript 值序列化为 JSON5 字符串。

美化打印

传递 space 参数以格式化输出并添加缩进:
space 参数可以是数字(空格数)或字符串(用作缩进字符):

特殊值

JSON.stringify 不同,JSON5.stringify 保留特殊的数值:

模块导入

ES 模块

您可以直接作为 ES 模块导入 JSON5 文件:
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 文件可以被动态导入: