首页 > 其他分享 >JSON.stringify有什么局限性和哪些技巧?

JSON.stringify有什么局限性和哪些技巧?

时间:2025-01-17 09:32:41浏览次数:1  
标签:stringify undefined 对象 JSON 局限性 字符串 序列化

JSON.stringify是JavaScript中用于将对象转换为JSON字符串的方法,但它在某些情况下具有局限性,同时也有一些技巧可以帮助开发者更有效地使用它。以下是关于JSON.stringify的局限性和技巧的详细解答:

局限性:

  1. 循环引用问题:当对象之间存在循环引用时,JSON.stringify会抛出错误。例如,一个对象的属性引用了另一个对象,而后者又引用了前者,这种情况下序列化会失败。

  2. 不支持函数和undefined:在序列化过程中,对象中的函数和undefined值会被忽略。这意味着如果对象包含这些类型的数据,它们在转换后的JSON字符串中将不会存在。

  3. 特殊类型属性转换:诸如Date、RegExp、Map、Set、Error等JavaScript内置对象及其属性,在序列化时会被转换为基本的字符串或数组形式,从而失去其原始的数据类型。

  4. 精度损失:对于非常大或非常小的数值,JSON.stringify在序列化时可能会造成精度损失。

  5. 对象方法丢失:由于JSON格式不支持函数表达,因此对象的方法在序列化后无法恢复。

  6. 不支持自定义类类型:如果对象是自定义类的实例,其构造函数、原型链上的方法等信息无法通过JSON的序列化和反序列化得到保留。

技巧:

  1. 使用replacer参数:replacer参数允许开发者自定义序列化过程中哪些属性被包含以及如何序列化。它可以是一个函数,被逐个调用并作用于每个对象的属性,或者是一个数组,指定应被包含在序列化结果中的属性名列表。

  2. 保留undefined值:虽然JSON标准不包含undefined,但可以通过replacer函数返回特殊标记(如'undefined'),在解析时再将其恢复为undefined,从而实现在序列化过程中保留undefined值的目的。

  3. 处理非标准类型:对于JavaScript中的非标准类型(如Date、RegExp等),可以利用replacer函数将其转换为可序列化的表示(如将日期对象转换为ISO字符串)。

  4. 美化输出的JSON字符串:通过提供space参数(一个非负整数或字符串),可以控制输出的JSON字符串的缩进和空白,从而提升其可读性。

  5. 处理循环引用:为了避免循环引用导致的错误,可以使用第三方库(如json-stringify-safe)或手动遍历对象树来提前打破循环引用。

  6. 利用toJSON方法:如果对象定义了toJSON方法,JSON.stringify将使用该方法的返回值作为序列化结果。这提供了自定义序列化过程的灵活性,例如隐藏敏感信息或仅返回关键数据。

标签:stringify,undefined,对象,JSON,局限性,字符串,序列化
From: https://www.cnblogs.com/ai888/p/18676217

相关文章

  • 使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级
    一、API的选择我们进行接口测试需要API文档和系统,我们选择JSONPlaceholder免费API,因为它是一个非常适合进行接口测试、API测试和学习的工具。它免费、易于使用、无需认证,能够快速帮助开发者模拟常见的接口操作(增、删、改、查)。尤其对于我你们学习接口测试的初学开发者来说,它......
  • wordpress 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新
    两种报错方式:1.此响应不是合法的JSON响应。2.从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。情况:媒体服务器上传小文件没问题,大一点的文件报这个错误。原因:这是因为nginx限制了请求体大小方案:需要在nginx的虚拟机配置文件中添加:client_max_b......
  • Jsoncpp的安装与使用方式
    JsonCpp是一个C++库,用于解析和生成JSON数据。它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式。安装Jsoncpp我们可以输入以下命令安装jsoncpp库。sudoyuminstall-yjsoncpp-devel安装时默认安装动态库。头文件存储在/usr/include/jsoncpp/json中。......
  • Json 序列化,将对象序列化为Json字符串(此Json序列化,是“不安全的放松JSON转义”,即不会
    ///<summary>///Json序列化帮助类///</summary>publicclassJsonSerializerHelper{///<summary>///将对象序列化为Json字符串(此Json序列化,是“不安全的放松JSON转义”,即不会将物特殊符号和中文进行转码)///</summary>///<paramname="obj"></param>......
  • Go 重写JSON序列化和反序列化方法
    packagemainimport( "encoding/json" "fmt" "log" "strings")typeStructsstruct{ Namestring`json:"name"` Genderint`json:"gender"`}//MarshalJSON重写序列化方法,如果gender是0则改为woman,......
  • 判断字符串是否为json字符串方法
    要验证一个字符串是否为有效的JSON格式,可以使用JavaScript的JSON.parse()方法,并结合try...catch语句来捕获解析过程中可能出现的异常。以下是一个示例函数:functionisJSON(str){if(typeofstr==='string'){try{constobj=JSON.par......
  • vscode调试中launch.json文件配置
    {  //使用IntelliSense了解相关属性。  //悬停以查看现有属性的描述。  //欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387  "version":"0.2.0",  "configurations":[    {      "name":"(gdb)......
  • ExcelConvert【Excel转换为XML JSON HTML CSV TXT】
    ExcelConverter是用VB6开发的应用软件。界面如下 第一部分:转换为XML首先在Excel选择一部分数据。 软件里面勾选“首列作为元素名称”,单击“转换”勾选与不勾选,得到如下XML数据,注意对比。<root><金龙宇性别="男"年龄="29"民族="汉族"籍贯="上海"/><姚晨......
  • 如何在虚拟主机或IIS中增加JSON扩展名的MIME类型?
    在虚拟主机或IIS中增加JSON扩展名的MIME类型是确保服务器正确处理JSON文件的关键步骤。以下是针对IIS7及以上版本的具体操作方法和注意事项,帮助您顺利完成设置。操作步骤打开IIS管理器在服务器上启动IIS管理器,连接到目标站点。选择站点在左侧树形结构中,展开服务器节点......
  • 如何在虚拟主机或 IIS 中增加 JSON 扩展名的 MIME 类型?
    在虚拟主机或IIS中增加JSON扩展名的MIME类型,可以按照以下步骤进行:IIS7.0及以上版本打开IIS管理器:在服务器上打开IIS管理器。选择站点:在左侧树状结构中选择要配置的站点。进入MIME类型设置:在右侧操作面板中找到“MIME类型”并点击进入。添加......