详解JavaScript中JSON.stringify方法

 更新时间:2023年09月06日 08:29:18   作者:编程三昧  
JSON 对象是我们经常使用的一种数据存储对象,它的适用范围非常广,JSON.stringify 方法可以帮我们把一个对象或数组转换成一个 JSON字符串,本文我们给大家详细介绍一下JavaScript中JSON.stringify方法,需要的朋友可以参考下

JSON 对象是我们经常使用的一种数据存储对象,它的适用范围非常广。

而 JSON.stringify 方法的使用频率也极高,合理使用 stringify 方法,我们可以实现很多简单需求:

  • 要实现对象的深拷贝时,我们可以用 JSON 对象的 JSON.stringify 和 JSON.parse 来拷贝一个完全一样的对象,而不会对原对象产生任何引用关系。
  • 在使用 localStorage 时,也会用到它,因为 localStorage 只能存储字符串格式的内容,所以,我们在存之前,将数值转换成 JSON字符串。

JSON.stringify

JSON.stringify 方法可以帮我们把一个对象或数组转换成一个 JSON字符串。

我们通常只会用到它的第一个参数,其实它还有另外两个参数,可以让它实现一些非常好用的功能。

语法:

JSON.stringify(value[, replacer [, space]])

参数:

  • value:将要被序列化的变量的值
  • replacer:替代器。可以是函数或者是数组:
    • 如果是一个函数,则value 每个属性都要经过这个函数的处理,该函数的返回值就是最后被序列化后的值。
    • 如果是一个数组,则要求该数组的元素是字符串,且这些元素会被当做value 的键(key)进行匹配,最后序列化的结果,是只包含该数组每个元素为key 的值。
  • space:指定输出数值的代码缩进,美化格式之用,可以是数字或者字符串:
    • 如果是数字(最大为10)的话,代表每行代码的缩进是多少个空格。
    • 如果是字符串的话,该字符串(最多前十个字符)将作显示在每行代码之前。

这时候,你应该知道了。我们可以用 JSON.stringify 来做序列化时的过滤,相当于我们可以自定义JSON.stringify 的解析逻辑。

使用函数过滤并序列化对象

function replacer(key, value) {
    if (typeof value === "string") {
        return undefined;
    }
    return value;
}
var foo = {
    foundation: "Mozilla",
    model: "box",
    week: 45,
    transport: "car",
    month: 7
};
var jsonString = JSON.stringify(foo, replacer); // {"week":45,"month":7}

使用数组过滤并序列化对象

const user = {
    name: "zollero",
    nick: "z",
    skills: ["JavaScript", "CSS", "HTML5"]
};
JSON.stringify(user, ["name", "skills"], 2); 
// "{//   "name": "zollero",//   "skills": [//     "JavaScript",//     "CSS",//     "HTML5"//   ]// }"

还有一个有意思的东西,是对象的toJSON 属性。

如果一个对象有toJSON 属性,当它被序列化的时候,不会对该对象进行序列化,而是将它的toJSON 方法的返回值进行序列化

看下面的例子:

var obj = {
    foo: "foo",
    toJSON: function () {
        return "bar";
    }
};
JSON.stringify(obj); 
// '"bar"'JSON.stringify({x: obj}); // '{"x":"bar"}'

总结

stringify 方法的重点和难点在于第二和第三个参数的灵活使用上,需要多加练习。

到此这篇关于详解JavaScript中JSON.stringify方法的文章就介绍到这了,更多相关JavaScript JSON.stringify方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js给table赋值的实例代码

    js给table赋值的实例代码

    下面小编就为大家带来一篇js给table赋值的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • js删除对象/数组中null、undefined、空对象及空数组方法示例

    js删除对象/数组中null、undefined、空对象及空数组方法示例

    这篇文章主要给大家介绍了关于js删除对象/数组中null、undefined、空对象及空数组的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编一起来看看吧
    2018-11-11
  • javascript实现的textarea运行框效果代码 不用指定id批量指定

    javascript实现的textarea运行框效果代码 不用指定id批量指定

    今天在写一个网页的时候用到了N多嵌套在textarea标签里的代码,定义双击运行其内的代码段。但是每次创建一个这样的可运行的实例都要给textarea元素自定义一个id值和写入双击事件,好不麻烦。
    2009-12-12
  • PHP实现记录代码运行时间封装类实例教程

    PHP实现记录代码运行时间封装类实例教程

    这篇文章主要给大家介绍了利用PHP实现记录代码运行时间的封装类的相关教程,文中给出了详细的示例代码供大家参考学习,需要的朋友可以参考下
    2017-05-05
  • js 文本滚动效果的实例代码

    js 文本滚动效果的实例代码

    一个简单的滚动效果,我只测试了文本,对于图片有需要的朋友可以测试一下哦
    2013-08-08
  • cookie 最近浏览记录(中文escape转码)具体实现

    cookie 最近浏览记录(中文escape转码)具体实现

    cookie 最近浏览记录(中文escape转码)具体实现,需要的朋友可以参考一下
    2013-06-06
  • 教大家轻松制作Bootstrap漂亮表格(table)

    教大家轻松制作Bootstrap漂亮表格(table)

    这篇文章主要为大家详细介绍了Bootstrap轻松制作漂亮表格table的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 小程序多文件上传 Tdesign的过程

    小程序多文件上传 Tdesign的过程

    众所周知,小程序文件上传还是有点麻烦的,其实主要还是小程序对的接口有诸多的不便,比如说,文件不能批量提交,只能一个个的提交,小程序的上传需要专门的接口,现在给大家分享小程序多文件上传 Tdesign的方法,感兴趣的朋友一起看看吧
    2023-11-11
  • javascript获取url上某个参数的方法

    javascript获取url上某个参数的方法

    获取url上的某个参数的方法有很多,在本文为大家介绍下使用javascript是如何实现的,感兴趣的朋友不要错过
    2013-11-11
  • 详解 Map 和 WeakMap 区别以及使用场景

    详解 Map 和 WeakMap 区别以及使用场景

    这篇文章主要介绍了详解 Map 和 WeakMap 区别以及使用场景,Map本质上是一个键值对的集合,WeakMap 只能将对象作为键名,下面来一起俩姐更多详细内容吧,希望这一篇文章能让你对 Map 有更好的理解,或者能够帮你理解 Map 和 WeakMap
    2022-01-01

最新评论