JavaScript中的JSON序列化与反序列化有哪些高级技巧?

掌握JSON序列化与反序列化的高级技巧,能有效处理复杂数据。1. 使用replacer函数可过滤敏感字段(如password)、转换日期为ISO格式,并预处理循环引用,避免序列化错误。2. reviver函数在反序列化时可自动将日期字符串还原为Date对象,或重建类实例,提升数据恢复精度。3. 针对循环引用,可通过WeakSet跟踪已见对象,返回“[Circular]”标识,防止JSON.stringify报错。4. 原生不支持Map、Set、Symbol和函数的序列化,但可用Array.from转换Map和Set,函数则通过字符串存储并谨慎使用eval还原。5. 自定义toJSON方法允许对象控制自身序列化行为,适合封装在类中,实现更内聚的数据输出逻辑。综合运用这些方法,可在保证安全与性能的前提下,扩展JSON处理能力,应对复杂场景。

javascript中的json序列化与反序列化有哪些高级技巧?

JavaScript中的JSON序列化与反序列化不只是JSON.stringify()JSON.parse()的简单调用。掌握一些高级技巧,能帮助你更灵活地处理复杂数据结构、避免常见陷阱,并提升性能和安全性。

1. 使用 replacer 函数精细控制序列化内容

在调用JSON.stringify()时,第二个参数可以传入一个replacer函数,用于决定哪些属性应该被序列化。

这个技巧特别适合过滤敏感字段或转换特定类型的数据。

排除某些字段:比如去掉对象中的passwordtoken 转换日期:将Date对象转为ISO字符串 处理循环引用前的预处理示例:

const user = {  name: "Alice",  password: "secret123",  lastLogin: new Date()};const json = JSON.stringify(user, (key, value) => {  if (key === 'password') return undefined; // 过滤掉  if (value instanceof Date) return value.toISOString();  return value;});// 结果不包含 password,日期为标准格式

2. 利用 reviver 函数在反序列化时重建对象

JSON.parse()的第二个参数是reviver函数,可用于在解析过程中转换值。

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

常用于将字符串化的日期自动还原为Date对象,或重构类实例。

示例:自动识别并恢复日期

const data = '{"name":"Bob","createdAt":"2023-08-15T10:00:00.000Z"}';const obj = JSON.parse(data, (key, value) => {  if (typeof value === 'string' && /^d{4}-d{2}-d{2}Td{2}:d{2}:d{2}/.test(value)) {    return new Date(value);  }  return value;});// obj.createdAt 是 Date 实例

3. 处理循环引用(Circular References)

默认情况下,包含循环引用的对象调用JSON.stringify()会抛出错误。

解决方法包括使用第三方库或自定义replacer来跳过重复引用。

手动处理循环引用的 replacer:

function getCircularReplacer() {  const seen = new WeakSet();  return (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(JSON.stringify(obj, getCircularReplacer())); // 输出:{"name":"John","self":"[Circular]"}

4. 序列化 Map、Set、Symbol 和函数的替代方案

原生 JSON 不支持 Map、Set、Symbol 和函数,但可以通过replacerreviver模拟序列化。

Map 可转为数组对:Array.from(map) Set 可转为数组:Array.from(set) 函数可保存为字符串,在reviver中用evalnew Function还原(注意安全风险)示例:序列化 Map

const map = new Map([['a', 1], ['b', 2]]);const str = JSON.stringify(Array.from(map)); // "[["a",1],["b",2]]"// 反序列化const recovered = new Map(JSON.parse(str));

5. 自定义 toJSON 方法实现对象级控制

任何对象都可以定义toJSON()方法,该方法会在JSON.stringify()执行时被自动调用。

这比外部replacer更内聚,适合封装在类中。

示例:为类定制输出格式

class User {  constructor(name, email, password) {    this.name = name;    this.email = email;    this.password = password;  }  toJSON() {    return {      name: this.name,      email: this.email,      role: 'user'    };  }}const user = new User("Tom", "tom@example.com", "pass");console.log(JSON.stringify(user)); // {"name":"Tom","email":"tom@example.com","role":"user"}

基本上就这些。合理使用 replacer、reviver 和 toJSON,再配合类型转换逻辑,就能应对大多数复杂场景。关键是理解 JSON 的边界,并在必要时扩展它的能力。

以上就是JavaScript中的JSON序列化与反序列化有哪些高级技巧?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/40029.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 05:50:03
下一篇 2025年11月6日 05:53:37

相关推荐

  • Sahara AI项目是做什么的?谁创建了Sahara AI代币?团队背景可靠吗?

    sahara ai代币(sahara)是围绕人工智能(ai)相关项目或生态系统构建的数字资产。它通常作为该项目内部功能的一部分,可能用于支付服务、参与治理或获取特定权限。 Sahara AI代币(SAHARA)定义与所属区块链 1. Sahara AI代币(SAHARA)是一种加密货币,其价值和用途…

    2025年12月8日
    000
  • Chainlink(LINK)是什么?预言机如何连接现实与区块链?

    Chainlink(LINK)是一个在区块链领域扮演关键角色的去中心化预言机网络。它解决了一个区块链固有的难题:如何安全可靠地获取和使用链外的现实世界数据。本文将详细介绍Chainlink是什么,以及预言机如何作为桥梁,连接孤立的区块链环境与外部世界的信息,让智能合约能够根据现实情况执行。 2025…

    2025年12月8日
    000
  • 比特币现金(BCH)分叉往事:现在还有投资价值吗?

    比特币现金(BCH)是加密货币世界中一个备受关注的分支,其诞生和后续的发展充满了争议与故事。它源自比特币网络的一次硬分叉,旨在解决原链的扩容问题。然而,BCH自身也经历了一次重大的分叉,形成了不同的阵营。本文将回顾BCH的关键分叉历史,特别是其内部的分裂,并探讨在这些分叉往事之后,BCH在当前市场环…

    2025年12月8日
    000
  • 如何用USDT或ETH购买SAHARA?存储SAHARA用什么钱苞最安全

    关于sahara ai代币(sahara) SAHARA代币与所属区块链 1. Sahara AI代币,标识为SAHARA,是Sahara AI项目的原生功能型代币。 2. SAHARA代币通常基于以太坊区块链发行。 3. 作为一种ERC-20标准的代币,SAHARA兼容以太坊生态系统。 Sahar…

    2025年12月8日
    000
  • SAHARA的历史价格走势如何?影响SAHARA价格的因素有哪些?

    Sahara AI代币(SAHARA)是与特定人工智能项目关联的数字资产,主要用于支付服务、治理投票、奖励用户或访问功能;1. SAHARA通常基于如以太坊或BNB Chain等区块链网络构建,不同链的选择影响交易速度、成本和安全性;2. 其价格走势受市场供需关系影响,历史表现包含初期探索、调整及增…

    2025年12月8日
    000
  • 在哪里可以买到SAHARA代币?支持哪些交易所(CEX/DEX)?

    Sahara AI代币(SAHARA)是一种与人工智能项目相关的数字资产,主要用于支付服务费用、获取特定功能访问权限以及参与平台治理。1、它旨在支持和推动底层AI技术的发展;2、该代币部署在BNB Chain上,具备较快交易速度、较低费用及遵循BEP-20标准;3、获取途径包括中心化交易所(如币安、…

    2025年12月8日
    000
  • 一文了解Pi Network代币飙升38%,人工智能(AI)计划和谷歌合作传闻推动

    pi network代币价格本周上涨了38%,此前市场预期该项目将发布涉及人工智能的重要公告,引发了关于可能与谷歌建立合作关系的广泛讨论。 这波热议始于Pi Network联合创始人Nicolas Kokkalis在Consensus 2025大会的生成式AI专题讨论会上亮相,随即引发了关于Pi未来…

    2025年12月8日
    000
  • Ondo 币价格预测:2025年ONDO的价格会达到多少?

    越来越多的投资者将目光投向ondo coin——这款在token化现实资产方面专注的defi项目背后的代币。分析师和交易员们都在问一个大问题:ondo能涨到多高?在本文中,我们将剖析推动ondo价格增长的关键因素,并评估该币的真正潜力。 什么是Ondo Coin? Ondo Coin是Ondo Fi…

    2025年12月8日
    000
  • 加密,投资,专家选择:导航模因硬币躁狂症和人类身份的兴起

    在当今快速演变的加密领域中,从troller cat等模因币种到基于区块链的人类身份认证方案,专家们正在探索新的投资机遇。 各位加密爱好者,系好安全带吧!数字资产的世界比模因领主的狂热梦境还要疯狂。我们深入挖掘了当前的趋势,涵盖从模因币的热潮到证明你不是机器人的严肃项目。准备好咖啡,一起出发吧。 模…

    2025年12月8日
    000
  • 什么是Sahara AI代币(SAHARA)?SAHARA是哪个区块链上的代币?

    sahara ai代币(sahara)是一个与sahara ai项目相关的加密货币。这个项目专注于利用区块链技术构建去中心化的人工智能生态系统。sahara代币在这一生态中扮演着关键角色,支持着网络的运作和各项功能。 Sahara AI代币(SAHARA)概述 1. SAHARA是Sahara AI…

    2025年12月8日
    000
  • 从零开始了解币安币:交易所代币到底值不值得买?

    币安币(BNB)作为全球知名加密货币交易平台币安发行的原生代币,受到了广泛关注。对于刚接触加密货币的朋友来说,可能会好奇BNB究竟是什么,它有哪些用途,以及最关键的是,作为一种资产,它是否具有投资价值?本文将从零开始,系统地介绍BNB的基本概念、其在币安生态系统中的作用,并分析影响其价值的关键因素,…

    2025年12月8日
    000
  • 波卡币(DOT)是什么 跨链技术为何备受关注?

    区块链技术的快速发展带来了多样化的网络,但这些网络通常相互独立,形成了数据和价值的孤岛。为了解决这一问题,**跨链技术**应运而生,而波卡(Polkadot)正是这一领域的代表性项目之一。本文将深入探讨波卡币(DOT)的本质及其背后的波卡网络,并阐述跨链技术为何在全球范围内受到高度关注。我们将解释这…

    2025年12月8日
    000
  • ​最新虚拟货币交易入口地址

    最新虚拟货币交易入口地址 1. Binance binance(币安)继续以其庞大的生态系统和无可匹敌的交易深度,稳坐全球最大虚拟货币交易平台的宝座。其现货和衍生品市场的交易量长期占据行业领先地位,为用户提供了极佳的流动性,这意味着交易者可以以更小的滑点完成大额订单。binance的成功很大程度上归…

    2025年12月8日 好文分享
    000
  • Ruvi AI:雪崩的明矾有望获得13,500%的ROI?

    ruvi ai通过融合区块链与人工智能技术,打造出具备实用价值的模型,展现出清晰的增长路径与巨大的投资回报潜力,甚至可与avalanche早期的成功相媲美。 Ruvi AI:挑战 Avalanche 的新星,或带来13,500%的投资回报? Avalanche 已成为加密圈热议的话题,而如今,Ruv…

    2025年12月8日
    000
  • Alchemy Pay的全球推动:整合羊群和重新定义可访问性

    alchemy pay正通过与flock.io等战略伙伴的合作掀起波澜,进一步拓展其在ai、web3游戏以及全球金融领域的影响力。探索他们如何突破界限。 Alchemy Pay的全球扩展:联合Flock.io并重塑可访问性 Alchemy Pay致力于让数字资产和全球金融服务更易获取,而他们近期携手…

    2025年12月8日
    000
  • Ruvi Ai vs. Tron:达到1美元及以后的比赛

    ruvi ai能否超越tron?揭秘推动ruvi ai迈向1美元的关键动力,包括其实用性、结构化增长路径以及投资者信心。 Ruvi AI vs. Tron:向1美元进发的角逐 在加密货币不断演变的世界中,新兴项目层出不穷。Ruvi AI(Ruvi)正迅速赢得市场关注,有分析认为其有望超越Tron并实…

    2025年12月8日
    000
  • CESS,TGE和分散的AI:数据主权的新时代

    探索cess的代币生成事件(tge)及其在构建去中心化ai、数据主权与web3基础设施未来中的关键角色。 CESS、TGE与去中心化AI:开启数据自主权的新纪元 去中心化AI与区块链技术的融合正在快速重塑数字世界格局。CESS正逐步成为这一领域的核心力量,连接AI与Web3生态。随着近期代币生成事件…

    2025年12月8日
    100
  • 加密价格预测:解码PI网络和块3嗡嗡声

    通过挖掘pi network的潜力、block3在ai游戏领域的雄心以及关键市场趋势,帮助您在加密货币波动中找到方向。 加密价格预测:揭开PI网络与块3的热议话题 加密市场如同过山车般起伏不定,预测价格波动就像踏上一场未知的冒险。目前,Pi Network和Block3两个项目正引发广泛关注,它们各…

    2025年12月8日
    100
  • 比特币采矿:将数字梦想变成每日美元

    揭示比特币挖矿,特别是通过云平台如何成为颠覆加密货币格局的潜在力量。深入探索! 比特币的热潮再次回归,而这一次,它不仅仅是盲目持有和祈祷。精明的投资者正将目光投向比特币挖矿,令人意外的是,云挖矿平台正在引领这股浪潮,为那些渴望涉足加密世界的人提供了一条便捷通道。 从持有到行动:为何选择比特币挖矿? …

    2025年12月8日
    000
  • Tron vs. Ruvi AI:AI代币可以超过加密退伍军人吗? 50%上升!

    tron在加密货币领域的领先地位正遭遇来自ruvi ai等新兴ai代币的挑战,其中ruvi ai已实现50%的涨幅,正在引发投资者关注。这是否预示着加密投资的新方向? Tron作为加密圈耳熟能详的名字,如今面临AI代币日益激烈的竞争。Ruvi AI(RUVI)近期表现亮眼,价格飙升50%,吸引了大量…

    2025年12月8日
    100

发表回复

登录后才能评论
关注微信