# aardio 标准库 JSON 解析规范
发布日期:2020-12-27
参考: JSON 标准库
JSON 字符串化时完全符合 JSON 官方标准( https://json.org/json-zh.html )。 JSON 解析时完全支持 JSON,JSONP,并使用宽松的原则兼容 JSON5,兼容部分类 YAML 语法。
aardio 以“宽进严出、简洁高效”为基本原则。 解析时规则尽可能宽松容错,生成 JSON 字符串则严格遵守标准 JSON 规则。
aardio 标准库在遵守 JSON 标准协议的前提下为 JSON 解析器扩展了以下功能:
{},:字符串置于双引号中时支持 JSON 转义符。 JSON 字符串置于单引号内不支持 JSON 转义符,使用 2 个单引号表示原始单引号。 在引号内部时字符串可以换行。
要特别注意 aardio 语法规则正好跟上面相反: aardio 代码里单引号内是“编译时转义字符串”(反斜杆识别为转义符,属于 “JavaScript 风格字符串” ),而双引号内是原样字符串(编译时将反斜杆作为普通字符,并以两个双引号表示原始双引号,属于 “BASIC/SQL 风格” 字符串)。
JSON 字符串可省略首尾引号,此时不支持 JSON 转义符,遇到回车或换行、逗号、中括号、大括号时字符串结束解析。字符串作为对象键名如果省略引号时不能包含空白字符、换行或键值分隔符。
1、支持 // 或 # 引导的单行注释
2、支持包含于 /*......*/ 内的块注释(注意这里按js规则不匹配首尾星号数目)。
数值支持 16 进制
可以使用 null,undefined,~ 表示 null 值。
可使用 ISO 8601 格式表示日期时间,合法的格式如下:
2021-01-1
2021-02-1T15:02:31+08:00
2021-02-1T15:02:31+08:00Z
数字前可不用补 0,但日期分隔符必须使用短横线,时间分隔符必须使用冒号, 尾部时区不可以包含空白字符,但可以包含 +-: 等字符以及数字、字母。
日期时间不用包含在引号内,引号内会被误别为字符串,示例:
{"time":2021-01-1,"string":"2021-01-1" }