JSON格式转换两大核心语法

JSON.parse()JSON.stringify()的区别

在 JavaScript 中,JSON.parse()JSON.stringify() 是处理 JSON 数据的两个核心方法,它们的功能恰好相反,分别用于 JSON 字符串与 JavaScript 对象之间的转换。以下是两者的详细区别:

1. 功能本质不同

  • JSON.parse() :将JSON 格式的字符串 解析为JavaScript 对象 (或数组、基本类型值)。

    简单说,就是把"文本形式的 JSON 数据"变成程序可以直接操作的 JavaScript 数据结构。

    示例:

    javascript 复制代码
    const jsonStr = '{"name":"Alice","age":25}';
    const obj = JSON.parse(jsonStr); // 转换为对象:{ name: "Alice", age: 25 }
  • JSON.stringify() :将JavaScript 对象 (或数组、基本类型值)转换为JSON 格式的字符串

    作用是把程序中的数据转换成可传输、可存储的文本格式(JSON 字符串)。

    示例:

    javascript 复制代码
    const obj = { name: "Bob", age: 30 };
    const jsonStr = JSON.stringify(obj); // 转换为字符串:'{"name":"Bob","age":30}'

2. 应用场景不同

  • JSON.parse() 的典型场景

    • 解析从服务器接收到的 JSON 格式响应数据(如 AJAX 请求返回的字符串)。
    • 读取本地存储(localStorage/sessionStorage)中保存的 JSON 字符串,还原为对象供程序使用。
  • JSON.stringify() 的典型场景

    • 将 JavaScript 数据转换为 JSON 字符串,通过网络发送给服务器(如接口请求参数)。
    • 将数据以 JSON 字符串形式存入本地存储(因为本地存储只能保存字符串)。
    • 简单克隆对象(浅克隆,有局限性)或格式化数据用于打印。

3. 参数与额外功能不同

两者都支持额外参数,实现更灵活的转换:

  • JSON.parse(text, reviver)

    第二个参数 reviver 是一个函数,用于在解析过程中修改结果。例如,将日期字符串转换为 Date 对象:

    javascript 复制代码
    const jsonStr = '{"name":"Charlie","birth":"2000-01-01"}';
    const obj = JSON.parse(jsonStr, (key, value) => {
      if (key === 'birth') return new Date(value); // 转换为Date对象
      return value;
    });
    // 结果:{ name: "Charlie", birth: Date对象 }
  • JSON.stringify(value, replacer, space)

    • replacer:函数或数组,用于过滤/修改要转换的属性(如排除敏感字段)。
    • space:数字或字符串,用于格式化输出的 JSON 字符串(增加缩进,便于阅读)。
      示例:
    javascript 复制代码
    const obj = { name: "Dave", age: 35, password: "123" };
    // 过滤掉password,并缩进2个空格
    const jsonStr = JSON.stringify(obj, ['name', 'age'], 2);
    /* 结果:
    {
      "name": "Dave",
      "age": 35
    }
    */

4. 注意事项

  • JSON.parse() 需注意格式合法性 :如果输入的字符串不是有效的 JSON 格式(如缺少引号、使用单引号等),会抛出 SyntaxError

    例如:JSON.parse('{name: "Alice"}') 会报错(属性名必须用双引号)。

  • JSON.stringify() 的限制

    • 无法转换函数、undefinedSymbol 类型的属性(会被忽略)。
    • 循环引用的对象会导致报错(如 obj.self = obj)。
    • Date 对象会被转换为 ISO 格式字符串(解析时需手动转回 Date)。

总结对比表

特性 JSON.parse() JSON.stringify()
核心功能 JSON字符串 → JavaScript对象 JavaScript对象 → JSON字符串
典型用途 解析网络响应、读取本地存储数据 发送数据到服务器、存储数据到本地
输入类型 符合JSON格式的字符串 JavaScript对象/数组/基本类型
输出类型 JavaScript对象/数组/基本类型 JSON格式的字符串
特殊参数 支持reviver函数修改解析结果 支持replacer过滤属性、space格式化输出

简言之,JSON.parse() 是"读"操作(将字符串还原为数据),JSON.stringify() 是"写"操作(将数据转换为字符串),二者共同实现了 JSON 数据的解析与序列化。