登录
首页 >  文章 >  前端

JavaScript处理JSON:数据序列化与解析详解

时间:2025-12-24 15:06:40 153浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《JavaScript如何操作JSON:序列化与解析复杂数据》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

JavaScript操作JSON核心是JSON.stringify()和JSON.parse(),前者序列化对象为字符串,后者解析字符串为对象;对Date需reviver还原,循环引用需replacer规避或用第三方库,Map/Set等需手动转换,解析须try/catch容错。

javascript如何操作json_怎样序列化和解析复杂数据结构

JavaScript 操作 JSON 的核心就是 JSON.stringify()JSON.parse() 两个方法,它们分别负责序列化(对象 → 字符串)和解析(字符串 → 对象)。对复杂数据结构(如含函数、Date、undefined、循环引用、Map/Set、RegExp 等),原生 JSON 方法有局限,需额外处理。

基础序列化与解析

绝大多数普通对象、数组、字符串、数字、布尔值、null 都能直接用原生方法处理:

  • 序列化: JSON.stringify({ name: "Alice", age: 30 })'{"name":"Alice","age":30}'
  • 解析: JSON.parse('{"name":"Alice","age":30}'){ name: "Alice", age: 30 }

注意:JSON 标准不支持 undefined、函数、Symbol、BigInt;这些在 stringify 时会被忽略(对象属性)或转为 null(数组元素)。

处理日期(Date)和自定义格式

Date 对象默认序列化为 ISO 字符串(如 "2024-05-12T08:30:00.000Z"),但解析后是字符串而非 Date 实例。若需还原为 Date,可借助 reviver 函数:

  • 序列化时无需特殊操作(JSON.stringify(new Date()) 正常输出字符串)
  • 解析时用 reviver 判断并重建:
    JSON.parse(jsonStr, (key, val) => {
      if (typeof val === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(val)) {
        return new Date(val);
      }
      return val;
    });

应对循环引用和不可序列化类型

遇到循环引用(如 obj.a = obj)会直接报错 TypeError: Converting circular structure to JSON。解决方案包括:

  • 使用 JSON.stringify(obj, (key, val) => { ... }) 自定义 replacer,跳过循环引用字段(例如记录已访问对象 Set,重复出现则返回 undefined
  • 用第三方库如 flattedcycle.js 支持带引用标记的序列化/反序列化
  • 对 Map/Set/RegExp 等,需手动转换为普通对象或数组再序列化,例如:
    const map = new Map([['a', 1]]);
    const plainObj = Object.fromEntries(map); // { a: 1 }

安全解析与容错处理

用户输入或网络响应的 JSON 字符串可能格式错误。务必用 try/catch 包裹 JSON.parse

  • try { const data = JSON.parse(str); } catch (e) { console.error('Invalid JSON:', e.message); }
  • 不要信任任何外部来源的 JSON 字符串——它可能被恶意构造(虽 JSON 本身不执行代码,但后续处理逻辑可能受控)
  • 如需更严格的校验,可在解析后用类型检查(如 typeof data === 'object' && data !== null)或配合 zod/yup 做 schema 验证

到这里,我们也就讲完了《JavaScript处理JSON:数据序列化与解析详解》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>