**
什么是 JSON?
**
JavaScript Object Notation,是一种轻量级的数据交换格式。可以理解为是一种跨语言的文本格式(即与具体语言无关),方便数据传输与协作,易于人阅读和编写,同时也易于机器解析和生成
**
结构和规则
**
键值对 {字典(dict)}
值的有序列表 [列表(list)]
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,json本质上是字符串
**
JSON5
**
JSON5是对JSON的扩展,JSON5相对于JSON增加了以下特性
对象:
- 属性key可以不使用引号包含
{
code:200,
'msg':'OK'
}
- 属性key可以使用单引号包含
{
'code':200,
'msg':'OK'
}
字符串:
- 可以以单引号包含
{
'code':200,
'msg':'OK'
}
- 支持多行字符串
{
"name": "lluozh",
"addr": "NanYun Road,\
GuangZhou,\
China",
}
- 可以包含转义字符
{
"nickname": '\u6881\u6d1b\u5f70'
}
数组:
- 可以在尾部有多余逗号
[1, 2, 3, 4,]
注释:
- 支持单行/多行注释
/**
* json5
* json for humans
*/
{
// 姓名
name: 'ManerFan',
sex: 'male' // 性别
}
数字:
- 可以使用16进制表示
{
bigInt: 0x14FFFFFFFFFFFFFFFFFF
}
- 可以以小数点开头或结尾
{
doubleNum: -.25e2
}
- 支持 Infinity, -Infinity, NaN
{
nanNum: NaN
}
- 可以显示声明 +
{
intNum: +123
}
**
jsondiff
**
比较两个json,如下
dict1:
{
"id": "504",
"name": "软件1",
"info":
{
"uid": "2017",
"stuId":
{
"stu1":1,
"stu2":2
},
"stuName": ["张三","李四",{"name":"钱2"}]
}
}
dict2:
{
"id": "503",
"name": "希沃白板5",
"info":
{
"uid": "2018",
"stuId":
{
"stu1":1,
"stu3":3
},
"stuName": ["张三","李四","王五",{"name":"钱钱"}]
}
}
jsondiff.diff(dict1,dict2),得到结果
{
'id': '503',
'name': '希沃白板5',
'info': {
'uid': '2018',
'stuId': {
'stu3': 3, delete:['stu2']},
'stuName': {3: {'name': '钱钱'}, insert: [(2, '王五')]}
}
}