J*aScript序列化_JSON高级处理技术
通过replacer和reviver函数可实现JSON的高级处理,如过滤敏感字段、序列化函数与循环引用、恢复Date类型及支持Map/Set结构。

在J*aScript中,JSON(J*aScript 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对象。
e网企业2.0
一款适用于中小企业自助建站程序,是c#与xml技术相结合的产物,支持动态设定二级栏目,采用了开放式架构,建站模版自由添加。程序整合了(单一文本,新闻列表,图片列表 ,在线订单, 文件下载 , 留言板)六类插件,以所见即所得的方式,将烦锁的建站过程简化到三步,使用户可以轻松上手。 管理后台:manage.aspx 初始密码均为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记录已访问对象,跳过重复引用。
扩展:支持Map、Set等内置类型
原生JSON不支持Map、Set等结构。可通过replacer将其转为普通对象,再用reviver还原。
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处理难题,包括过滤字段、类型恢复、循环引用和扩展数据结构支持。关键是理解它们的执行机制,并结合实际场景设计转换逻辑。
以上就是J*aScript序列化_JSON高级处理技术的详细内容,更多请关注其它相关文章!
