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 ,
}