首页 > web前端 > js教程 > 正文

JavaScript序列化_JSON高级处理技术

紅蓮之龍
发布: 2025-11-21 22:05:02
原创
206人浏览过
通过replacer和reviver函数可实现JSON的高级处理,如过滤敏感字段、序列化函数与循环引用、恢复Date类型及支持Map/Set结构。

javascript序列化_json高级处理技术

在JavaScript中,JSON(JavaScript Object Notation)是最常用的序列化格式之一。虽然JSON.stringify()JSON.parse()已经能满足大部分基础需求,但在实际开发中,面对复杂数据结构或特殊类型时,需要更高级的处理技巧。

自定义序列化:使用replacer函数

默认情况下,JSON.stringify()无法处理函数、undefined、Symbol等值,还会忽略对象中的循环引用。通过传入replacer参数,可以精细控制序列化过程。

replacer可以是一个函数或数组。作为函数时,它会在每个键值对被序列化前调用:

const user = { name: 'Alice', age: 30, secret: 'password123', sayHi: function() { console.log('Hi'); }, meta: undefined }; const json = JSON.stringify(user, (key, value) => { if (key === 'secret') return undefined; // 过滤敏感字段 if (typeof value === 'function') return '[Function]'; // 标记函数 return value; }); console.log(json); // {"name":"Alice","age":30,"sayHi":"[Function]"}

恢复复杂数据类型:reviver函数的应用

JSON.parse()的第二个参数是reviver函数,可用于在反序列化过程中转换数据,比如将字符串日期自动转为Date对象。

立即学习Java免费学习笔记(深入)”;

开店星免费开源商城系统
开店星免费开源商城系统

开店星基于Yii2+Vue2.0+uniapp 前沿技术研发,易学易用,前后端分离,多端开发,负载均衡,性能优越架构稳定;商城商品、订单、用户精细化管理;涵盖秒杀、消费奖励、超.级海报等基础营销插件;H5+小程序+公众号,全渠道覆盖,框架成熟稳定便于扩展,高效二开,低成本快速搭建个性化商城。 演示站地址: 账号:admin 密码:admin移动页面展示

开店星免费开源商城系统 0
查看详情 开店星免费开源商城系统
const data = '{"name":"Bob","birth":"1990-05-12T00:00:00Z"}'; const parsed = JSON.parse(data, (key, value) => { if (key === 'birth' && typeof value === 'string' && /^\d{4}-/.test(value)) { return new Date(value); // 自动转为Date } return value; }); console.log(parsed.birth instanceof Date); // true

处理循环引用对象

当对象存在循环引用时,直接使用JSON.stringify()会抛出错误。可以通过replacer配合WeakSet记录已访问对象,跳过重复引用。

function stringifyCircular(obj) { const seen = new WeakSet(); return JSON.stringify(obj, (key, value) => { if (typeof value === 'object' && value !== null) { if (seen.has(value)) { return '[Circular]'; } seen.add(value); } return value; }); } const obj = { name: 'John' }; obj.self = obj; console.log(stringifyCircular(obj)); // {"name":"John","self":"[Circular]"}

扩展:支持Map、Set等内置类型

原生JSON不支持Map、Set等结构。可通过replacer将其转为普通对象,再用reviver还原。

// 序列化 const cache = new Map([['key1', 'value1']]); const str = JSON.stringify({ cache }, (k, v) => { if (v instanceof Map) { return { __type: 'Map', value: Array.from(v.entries()) }; } return v; }); // 反序列化 const restored = JSON.parse(str, (k, v) => { if (typeof v === 'object' && v?.__type === 'Map') { return new Map(v.value); } return v; }); console.log(restored.cache instanceof Map); // true

基本上就这些。掌握replacer和reviver的灵活使用,能有效应对大多数JSON处理难题,包括过滤字段、类型恢复、循环引用和扩展数据结构支持。关键是理解它们的执行机制,并结合实际场景设计转换逻辑。

以上就是JavaScript序列化_JSON高级处理技术的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号