JSON 与 AJAX
一、JSON(JavaScript Object Notation)
1. 数据类型与语法细节
-
支持的数据类型:
- 基本类型:字符串(需用双引号)、数字、布尔值(
true/false
)、null
。 - 复杂类型:数组(
[]
)、对象({}
)。
- 基本类型:字符串(需用双引号)、数字、布尔值(
-
严格语法规范:
- 键名必须用双引号包裹(如
"name": "张三"
)。 - 数组元素用逗号分隔,最后一个元素后不能有多余逗号。
- 数字不能以
0
开头(如012
会被解析为12
),不支持八进制 / 十六进制表示。
- 键名必须用双引号包裹(如
-
特殊场景示例:
json
{"timestamp": 1686528000,"isAdmin": null,"emptyArray": [],"nestedObject": {"nestedArray": [1, 2, {"key": "value"}]},"escapedString": "Hello \"World\" \\n Newline" // 转义字符:\", \/, \b, \f, \n, \r, \t }
2. JSON 与 JavaScript 对象的区别
特性 | JSON | JavaScript 对象 |
---|---|---|
语法限制 | 键名必须用双引号 | 键名可省略引号(非字符串键) |
数据类型 | 无函数、Symbol、Date 等 | 支持全部 JS 数据类型 |
序列化 | JSON.stringify() | 需手动处理复杂类型 |
原型链 | 不保留原型链 | 包含原型链属性 |
3. JSON 解析与序列化进阶
-
循环引用处理:
javascript
const obj = { name: '循环对象' }; obj.self = obj; // JSON.stringify(obj) 会报错 // 解决方案:使用replacer函数过滤循环引用 JSON.stringify(obj, (key, value) => {if (value === obj) return '[Circular Reference]';return value; });
-
大 JSON 数据处理:
- 分段解析:使用
JSON.parse()
的reviver
参数逐步处理。 - 流式解析:Node.js 中可用
JSONStream
库处理 GB 级 JSON 文件。
- 分段解析:使用
-
JSON Schema 验证:
使用ajv
等库验证 JSON 数据格式,例如:javascript
const Ajv = require('ajv'); const ajv = new Ajv();const schema = {type: 'object',properties: {name: { type: 'string' },age: { type: 'number', minimum: 18 }},required: ['name', 'age'] };const valid = ajv.validate(schema, { na