既然是重学,首先得跳过最基础的html/css/js/ts与各种框架的使用,而是强化基础的规范和标准
JSON是受Javascript字面量对象启发的数据结果,是它的一个子集,同时也是与其它多种语言的交集,比xml更轻量,而且使用越来越多的数据传输格式。
一、基础组成:
1. 六种结构标记:
[ // U+005B 左方括号
{ // U+007B 左花括号
] // U+005D 右方括号
} // U+007D 右花括号
: // U+003A 冒号
, // U+002C 逗号
// 都是半角符号
2. 7种值:
object // {key:value,key2:value2}
array // [value1,value2]
number // (-)(1-9)(0-9)+(.)(0-9)(e|E)(-|+)(0-9) 
string // ""
true
false
null
JSON的是可嵌套的key=>value对,所谓可嵌套指的是value也可以是key=>value的JSON对象

二、注意事项:
** JSON的键值key只能是字符串
** JSON不能有多余的,(逗号)
** JSON的key-value-标记之间允许空格
** null还代表值可能是无效的JSON值,例如NaN-Infinite等序列化会被转化成null
** 会忽略函数,循环引用会造成circular异常抛出
** 字符串的转义
\" // === \u+0022
\\ // === \u+005C 
\/ // === \u+002F 
\b //     \u+0008 
\f //     \u+000C 
\n //     \u+000A
\r //     \u+000D
\t //     \u+0009

三、Javascript使用技巧
1. 复杂对象可以自定义toJSON方法来自定义序列化后的值
2. 需要循环引用的场景,通常是类树结构,可以将parent赋值为节点的id,这样就不是引用了。
3. 默认的toJSON方法性能一般,如果在对象数据结构明确时,可以重写之
4. JSON.parse可能会抛出异常,可以自己写一个函数来处理默认值的场景
export const parseJSON = (str,def) => {
    try{
        return JSON.parse(str)
    }catch{
        return def
    }
}