介绍
JSON5 是 JSON 的超集扩展,完全兼容标准 JSON,核心目标是让手写配置文件更友好、易维护,语法借鉴 ES5 规则,适合人工编辑而非机器通信。
- 全称:JSON5 – JSON for Humans
- 本质:JSON 超集 + ES5 子集;合法 JSON 都是合法 JSON5,合法 JSON5 都是合法 ES5
- 用途:主打配置文件(如项目配置、环境变量),不推荐用于机器间数据交换
- 生态:Node.js 生态广泛采用(如 Babel、Next.js),鸿蒙、Apple 平台原生支持
应用场景
- 项目配置文件(如
babel.config.json5、app.json5,鸿蒙应用开发配置文件) - 环境变量配置
- 手写、需频繁修改的配置
- 需要注释说明的配置
JSON vs JSON5 关键差异
| 特性 | 标准 JSON | JSON5 |
|---|---|---|
| 注释 | ❌ 不支持 | ✅ 单行 //、多行 /* */ |
| 对象键 | 必须双引号 | 可无引号(合法标识符)、单/双引号 |
| 字符串 | 仅双引号、不可换行 | 单/双引号、反斜杠换行 |
| 尾随逗号 | ❌ 禁止 | ✅ 对象/数组末尾允许 |
| 数值 | 仅十进制 | 十六进制 0xFF、+3.14、.5、5.、Infinity、NaN |
| 空白 | 严格限制 | 支持更多空白字符 |
JSON5 完整语法特性
1. 注释支持(最实用)
{
// 单行注释:说明字段用途
name: "JSON5",
/*
多行注释:
临时禁用区块
*/
version: "1.0.0"
}
2. 对象键灵活
- 无引号(合法标识符:字母/
$/_开头,后续字母/数字/$/_) - 单引号/双引号
{ normalKey: "无引号", 'special-key': "单引号", "double-key": "双引号" }
3. 字符串增强
- 单引号/双引号
- 反斜杠换行(多行字符串)
- 支持转义(
\n/\t/\\){ single: '单引号字符串', double: "双引号字符串", multi: "第一行\ 第二行\ 第三行" }
4. 数值扩展
- 十六进制:
0xFF(255) - 显式正号:
+3.14 - 首尾小数点:
.5、5. - 特殊值:
Infinity、-Infinity、NaN{ hex: 0xFF, positive: +42, leadingDot: .5, trailingDot: 5., inf: Infinity, nan: NaN }
5. 尾随逗号(减少错误)
对象/数组最后一个元素后可加逗号,新增元素无需改逗号
{
list: [
"apple",
"banana", // 尾随逗号合法
],
config: {
a: 1,
b: 2, // 尾随逗号合法
}
}
6. 宽松空白
支持空格、制表符、换行等,格式更自由
JSON5 示例(完整配置)
{
// 应用基础配置
appName: "MyApp",
version: "2.0.0",
isDebug: true,
/* 服务器配置
包含主机、端口、超时 */
server: {
host: "localhost",
port: 8080,
timeout: 3000,
},
// 特性开关
features: {
auth: true,
cache: false,
},
// 数值示例
maxRetries: 5,
pi: 3.14159,
hexColor: 0x1A2B3C,
// 多行文本
description: "这是一个\
多行描述文本\
支持换行",
}
使用方式(Node.js)
1. 安装
npm install json5
2. 解析 JSON5
const JSON5 = require('json5');
const fs = require('fs');
// 读取并解析
const raw = fs.readFileSync('config.json5', 'utf8');
const config = JSON5.parse(raw);
console.log(config);
3. 字符串化
const obj = { name: "JSON5", version: "1.0.0" };
const json5Str = JSON5.stringify(obj, null, 2);
console.log(json5Str);
注意事项
❌ 不推荐场景
- API 数据交换(标准 JSON 更通用)
- 跨语言数据传输
- 性能敏感的大规模数据解析
⚠️ 注意
- 非官方标准,部分语言解析库支持有限
- 浏览器原生不支持,需引入解析库
- 避免在 JSON5 中使用过复杂逻辑,保持配置简洁
总结
JSON5 是人性化的 JSON 扩展,通过注释、无引号键、单引号字符串、尾随逗号、数值扩展等特性,大幅提升手写配置的体验。它完全兼容 JSON,是 Node.js 生态与配置场景的优选,但不适合机器间通信。