JSON 与 AJAX

发布于:2025-06-13 ⋅ 阅读:(12) ⋅ 点赞:(0)
一、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