HarmonyOS之JSON5简介

JSON5 是对标准 JSON 的一种扩展,旨在让 JSON 更加宽松、易读、易写,尤其适合用作配置文件。它由 Aseem Kishore 等人在 2012 年发起,灵感来自 JavaScript 对象字面量的语法,目的是解决标准 JSON 在实际开发中过于严格、不便于手写的问题。


一、JSON5 的功能和特点

1. 属性名可以不加引号

只要属性名是有效的 JavaScript 标识符,就可以省略引号。

{
  foo: 1,
  bar_baz: 2
}

2. 支持单引号和双引号字符串

字符串既可以用单引号 ',也可以用双引号 "

{
  name: '张三',
  greeting: "Hello, world!"
}

3. 允许注释

支持 单行注释和 /* ... */ 多行注释。

{
  // 这是单行注释
  foo: 1, /* 这是多行注释 */
  bar: 2
}

4. 允许结尾逗号

对象和数组的最后一个元素后面可以有逗号。

{
  foo: 1,
  bar: 2, // 允许最后有逗号
}

5. 支持十六进制和科学计数法数字

可以写 0xFF 这样的十六进制数字,也支持科学计数法。

{
  hex: 0xDEADBEEF,
  big: 1.23e+45
}

6. 字符串可以换行

使用反斜杠 \ 允许字符串跨多行。

{
  longString: '这是一个很长的字符串\
可以换行'
}

7. 宽松的数字格式

允许数字前有正负号、前导点等。

{
  positive: +3,
  negative: -7,
  leadingDot: .5,
  trailingDot: 2.,
}

二、产生历史

JSON5 由 Aseem Kishore 和 Michael Bolin 等人于 2012 年发起,最初是为了解决标准 JSON 在配置文件和数据交换中的一些不便之处。标准 JSON 语法严格,不能加注释、属性名必须加引号、不能有结尾逗号等,这些在实际开发中常常带来困扰。JSON5 借鉴了 JavaScript 对象字面量的灵活性,允许更自然地书写数据结构。


三、应用场景

  • 配置文件:如 .babelrc, tsconfig.json5, webpack.config.json5 等,便于开发者手写和维护。
  • 需要手动编辑的数据文件:如本地化文本、Mock 数据等。
  • 需要注释说明的数据文件:便于团队协作和文档化。

四、丰富的代码示例

1. 标准 JSON 与 JSON5 对比

标准 JSON:

{
  "name": "Alice",
  "age": 25,
  "languages": ["JavaScript", "TypeScript"]
}

JSON5:

// 用户信息
{
  name: 'Alice', // 用户名
  age: 25,       // 年龄
  languages: [   // 编程语言
    'JavaScript',
    'TypeScript', // 允许结尾逗号
  ],
  hexId: 0x1234ABCD, // 十六进制ID
}

2. 更复杂的 JSON5 示例

{
  // 支持多种类型
  user: {
    id: 1001,
    name: 'Bob',
    isActive: true,
    // 支持科学计数法
    balance: 1.23e5,
    // 支持多行字符串
    description: '这是一段\
多行字符串',
    // 支持嵌套对象和数组
    tags: [
      'admin',
      'editor',
    ],
    // 支持注释
    /* 这里是多行注释 */
    meta: {
      created: '2023-01-01',
      updated: '2024-01-01',
    },
  },
}

五、如何使用 JSON5

在 Node.js 或前端项目中,可以通过 npm 安装 JSON5 解析库:

npm install json5

使用方法:

const JSON5 = require('json5');
const fs = require('fs');

const data = fs.readFileSync('config.json5', 'utf8');
const config = JSON5.parse(data);

console.log(config);

六、注意事项

  • JSON5 不是标准 JSON,不能直接用 JSON.parse 解析。
  • 仅适用于需要手写、维护的数据文件,不建议用于前后端通信的正式数据格式。

你可能感兴趣的:(HarmonyOS,HarmonyOS,Json5)