《 深入理解 JSON 格式与 JSON 对象》

104 阅读2分钟

深入理解 JSON 格式与 JSON 对象

一、JSON 的本质与存在形式

JSON,本质是 JS 对象字面量的子集。

它可以以两种形式存在:

  • 对象形式:用于解读 JSON 中的数据
  • 字符串形式:用于通过网络传输 JSON 数据

由此衍生出两个关键概念:

  • 反序列化(deserialization) :将字符串转换为原生对象
  • 序列化(serialization) :将原生对象转换为可网络传输的字符串

二、JSON 格式的核心规则

(一)JSON 数组与数据特性

  • JSON 是一种纯数据格式,它只包含属性,没有方法。
  • 甚至一个错位的逗号或分号就可以导致 JSON 文件出错。你应该小心检查你想使用的数据(计算机生成的 JSON 很少出错,只要生成程序正常工作)。可通过 JSONLint 验证 JSON。
  • JSON 可以是任何有效数据类型的形式,比如单个字符串或数字就是有效的 JSON 对象。
  • 与 JavaScript 代码中对象属性可不加引号不同,JSON 中只有带引号的字符串可作为属性。
  • JSON 要求在字符串和属性名称周围使用双引号,单引号无效。

三、JSON 对象

JavaScript 中内置了 JSON 对象,它提供了用于处理 JSON 数据的方法。JSON 作为一种语法,可用于序列化对象、数组、数值、字符串、boolean、null。

(一)静态方法

  • JSON.parse ()(反序列化) :解析 JSON 字符串并返回对应的值,可额外传入转换函数,在返回前修改生成的值和其属性。示例:

    javascript

    运行

    const json = '{"result":true, "count":42}';
    const obj = JSON.parse(json);
    
    console.log(obj.count);
    // 期望输出:42
    
    console.log(obj.result);
    // 期望输出:true
    
  • JSON.stringify ()(序列化) :返回与指定值对应的 JSON 字符串,可通过额外参数控制仅包含某些属性,或自定义替换某些属性值。示例:

    javascript

    运行

    console.log(JSON.stringify({ x: 5, y: 6 }));
    // Expected output: '{"x":5,"y":6}'
    
    console.log(
      JSON.stringify([new Number(3), new String("false"), new Boolean(false)]),
    );
    // Expected output: '[3,"false",false]'
    
    console.log(JSON.stringify({ x: [10, undefined, function () {}, Symbol("")] }));
    // Expected output: '{"x":[10,null,null,null]}'
    
    console.log(JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)));
    // Expected output: '"2006-01-02T15:04:05.000Z"'