登录
首页 >  文章 >  前端

JSON序列化技巧与实战应用解析

时间:2026-01-07 18:04:34 495浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《JSON高级序列化技巧与实战应用》,这篇文章主要讲到等等知识,如果你对文章相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

通过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对象。

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处理难题,包括过滤字段、类型恢复、循环引用和扩展数据结构支持。关键是理解它们的执行机制,并结合实际场景设计转换逻辑。

终于介绍完啦!小伙伴们,这篇关于《JSON序列化技巧与实战应用解析》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>