JSON5中文文档

左岸 2118 2023-01-04

JSON5

内容来自于JSON5官方文档

什么是JSON5

JSON5数据交换格式(JSON5)是JSON的超集,其目的是通过扩展JSON的语法来使用ECMAScript 5.1 中的一些成果,从而解决JSON的一些限制.

与JSON类似,JSON5可以表示四种基本类型(strings, numbers, Booleans, and null)[(字符串、数字、布尔值和null)]和两种结构化类型(对象和数组)[(objects and arrays)].

字符串是由零个或多个Unicode字符组成的序列. 请注意,本文引用的是最新版本的Unicode,而不是特定版本。预计未来Unicode规范中的更改不会影响JSON5的语法.

对象是零个或多个名称/值对的无序集合,其中名称为字符串或标识符,值为字符串、数字、布尔值、空值、对象或数组.

数组是由零个或多个值组成的有序序列。

特点概述

以下是JSON不支持的ECMAScript 5.1 特性,现已扩展到JSON5.

Objects [对象]

  • 对象键可以是ECMAScript 5.1 IdentifierName(标识名)
  • 对象可以有一个尾随逗号.

Arrays[数组]

  • 数组可以有一个尾随逗号

Strings[字符串]

  • 字符串可以用单引号引起来.
  • 字符串可以通过转义换行符来跨越多行.
  • 字符串可以包括字符转义.

Numbers[数字]

  • 数字可以是十六进制的.
  • 数字可以有前导小数点或尾随小数点.
  • 数字可以是IEEE 754正无穷大、负无穷大和NaN.
  • 数字可以以加号开头.

Comments[注释]

  • 允许单行和多行注释.

White Space [空白]

  • 允许使用额外的空格字符.

简单的例子

{
  // comments 注释
  unquoted: 'and you can quote me on that',
  // 可以使用双引号
  singleQuotes: 'I can use "double quotes" here',
  // 可以换行
  lineBreaks: "Look, Mom! \
No \\n's!",
  //数字可以是16进制
  hexadecimal: 0xdecaf,
  //行距小数点
  leadingDecimalPoint: .8675309, 
  andTrailing: 8675309.,
  //可以有+ 号
  positiveSign: +1,
  //尾随逗号
  trailingComma: 'in objects',
  andIn: ['arrays',],
  "backwardsCompatible": "with JSON",
}

Values

JSON5值必须是对象、数组、字符串或数字,或者是三个文字名称之一,或者 null

JSON5Value:
JSON5Null
JSON5Boolean
JSON5String
JSON5Number
JSON5Object
JSON5Array

Objects

对象结构表示为围绕零个或多个名称/值对(或成员)的一对花括号.名称是字符串或标识符.每个名称后面都有一个冒号,将名称与值分开,一个逗号将值与后面的名称分隔开.名称/值对后面可以跟着一个逗号,对象中的名称应该是唯一的

如果一个对象的名称都是唯一的,那么这个对象就是可互操作的,因为所有接收该对象的软件实现名称-值映射.当对象中的名称不是唯一的时,软件接收这样一个对象的行为是不可预测的.实现可能只报告最后的名称/值对,报告错误或解析对象失败,或报告所有的名称/值对,包括重复的名称/值对。

实现可以使对象成员的顺序对调用软件可见.行为不依赖于成员顺序的实现将是可互操作的,因为它们不会受此影响

Object Example (例子)


{
  // An empty object
  // 空对象
  nullObject: {},
  // An object with two properties 具有两个属性的对象
  // and a trailing comma 同时和尾随逗号
  widthAndHeight: {
      width: 1920,
      height: 1080,
  },
  // Objects can be nested 对象可以嵌套
  nested: {
    image: {
      width: 1920,
      height: 1080,
      'aspect-ratio': '16:9',
    }
  },
  // An array of objects 一组对象
  arrayOfObject: [
    { name: 'Joe', age: 27 },
    { name: 'Jane', age: 32 },
  ]
}

Arrays

数组结构用方括号表示,方括号括起0个或多个值(或元素).元素之间用逗号分隔,最后一个元素后面可以跟着一个逗号.

不要求数组中的值必须具有相同的类型

Arrays Example (例子)


{
  // An empty array 空数组
  nullOfArray: [],
  
  // An array with three elements 多个元素
  // and a trailing comma 尾随逗号
  elements:[
      1,
      true,
      'three',
  ],
  // Arrays can be nested 数组嵌套
  nested:[
    [],
    [1, true, 'three'],
    [4, "five", 0x6],
  ]
}

Strings

字符串以单引号或双引号开始和结束.字符串开头的引号也必须以字符串结尾.所有Unicode字符都可以放在引号内,但必须转义的字符除外:用于开始和结束字符串的引号、反实线和行终止符。

Strings Example (例子)


{
  // 字符串值单引号
  stringsSingle: 'stringsSingle',
  // 字符串值双引号
  stringsDouble: "stringsDouble",
  // 字符串key 与 值 都是双引号
  "JSON5DoubleStringCharacters" : "JSON5DoubleStringCharacters",
  // 字符串key 与 值 都是单引号
  'JSON5SingleStringCharacters' : 'JSON5SingleStringCharacters',
  // 字符串双引号换行
  JSON5DoubleStringNewLine: "Look, Mom! \
  No \\n's!",
  // 字符串单引号换行
  JSON5SingleStringNewLine: 'Look, Mom! \
  No \\n" s!',
}

Numbers

数字的表示与大多数编程语言中使用的数字表示类似,一个数字可以用十进制数表示为10,用十六进制数表示为16,或者IEEE 754值为正无穷大、负无穷大或NaN.

十进制数包含一个整数组成部分,它的前缀可以是一个可选的加号或减号,后面可以是一个分数部分和/或一个指数部分.

分数部分是小数点后面跟着一个或多个数字.

指数部分以大写或小写字母E开头,后面可以跟着加号或减号.E和可选符号后面跟着一个或多个数字.

Numbers Example (例子)

{
  //integer 整数
  integer: 123,
  //带分数部分
  withFractionPart: 123.456,
  //仅分数部分
  onlyFractionPart: .456,
  //带指数
  withExponent: 123e-456,

  //正十六进制
  positiveHex: 0xdecaf,
  //负十六进制
  negativeHex: -0xC0FFEE,
  
  //正无穷
  positiveInfinity: Infinity,
  //负无穷
  negativeInfinity: -Infinity,
  //不是数字
  notANumber: NaN,
}

Comments(注释)

注释可以是单行的,也可以是多行的. 多行注释不能嵌套. 注释可以出现在任何JSON5Token之前或之后.

Comments Example (例子)

{
  // 单行注释

  /* 这是多行
  注释 */
}

White Space

空格可以出现在任何JSON5Token之前和之后。

White Space Example (例子)

{
  //不是数字
  Space :  NaN ,
}