详解JSON.stringify()的5个秘密特性


Posted in Javascript onMay 26, 2020

JSON.stringify() 方法能将一个 JavaScript 对象或值转换成一个 JSON 字符串。

作为一名 JavaScript 开发人员,JSON.stringify() 是用于调试的最常见函数。但是它的作用是什么呢,难道我们不能使用 console.log() 来做同样的事情吗?让我们试一试。

//初始化一个 user 对象 
  const user = { 
  "name" : "Prateek Singh", 
  "age" : 26 
  } 
  console.log(user); 
  // 结果 
  // [object Object]

哦!console.log() 没有帮助我们打印出期望的结果。它输出 [object Object],因为从对象到字符串的默认转换是 [object Object]。因此,我们使用 JSON.stringify() 首先将对象转换成字符串,然后在控制台中打印,如下所示。

const user = { 
  "name" : "Prateek Singh", 
  "age" : 26 
 } 
 console.log(JSON.stringify(user)); 
 // 结果 
 // "{ "name" : "Prateek Singh", "age" : 26 }"

一般来说,开发人员使用 stringify 函数的场景较为普遍,就像我们在上面做的那样。但我要告诉你一些隐藏的秘密,这些小秘密会让你开发起来更加轻松。

第二个参数(数组)

是的,stringify 函数也可以有第二个参数。它是要在控制台中打印的对象的键数组。看起来很简单?让我们更深入一点。我们有一个对象 product 并且我们想知道 product 的 name 属性值。当我们将其打印出来:

console.log(JSON.stringify(product));

它会输出下面的结果。

{"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"},{"id":"1003","type":"Blueberry"},{"id":"1004","type":"Devil's Food"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5005","type":"Sugar"},{"id":"5007","type":"Powdered Sugar"},{"id":"5006","type":"Chocolate with Sprinkles"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]}

在日志中很难找到 name 键,因为控制台上显示了很多没用的信息。当对象变大时,查找属性的难度增加。stringify 函数的第二个参数这时就有用了。让我们重写代码并查看结果。

console.log(JSON.stringify(product,['name' ]); 
  // 结果 
  {"name" : "Cake"}

问题解决了,与打印整个 JSON 对象不同,我们可以在第二个参数中将所需的键作为数组传递,从而只打印所需的属性。

第二个参数(函数)

我们还可以传入函数作为第二个参数。它根据函数中写入的逻辑来计算每个键值对。如果返回 undefined,则不会打印键值对。请参考示例以获得更好的理解。

const user = { 
  "name" : "Prateek Singh", 
  "age" : 26 
 }

详解JSON.stringify()的5个秘密特性

// 结果 
  { "age" : 26 }

只有 age 被打印出来,因为函数判断 typeOf 为 String 的值返回 undefined。

第三个参数为数字

第三个参数控制最后一个字符串的间距。如果参数是一个数字,则字符串化中的每个级别都将缩进这个数量的空格字符。

// 注意:为了达到理解的目的,使用 '--' 替代了空格 
 JSON.stringify(user, null, 2); 
 //{ 
 //--"name": "Prateek Singh", 
 //--"age": 26, 
 //--"country": "India" 
 //}

第三个参数为字符串

如果第三个参数是 string,那么将使用它来代替上面显示的空格字符。

JSON.stringify(user, null,'**'); 
//{ 
//**"name": "Prateek Singh", 
//**"age": 26, 
//**"country": "India" 
//} 
// 这里 * 取代了空格字符

toJSON 方法

我们有一个叫 toJSON 的方法,它可以作为任意对象的属性。JSON.stringify 返回这个函数的结果并对其进行序列化,而不是将整个对象转换为字符串。参考下面的例子。

const user = { 
 firstName : "Prateek", 
 lastName : "Singh", 
 age : 26, 
 toJSON() { 
   return {  
    fullName: `${this.firstName} + ${this.lastName}` 
   }; 
 } 
 } 
 console.log(JSON.stringify(user)); 
 // 结果 
 // "{ "fullName" : "Prateek Singh"}"

这里我们可以看到,它只打印 toJSON 函数的结果,而不是打印整个对象。

我希望你能学到 stringify() 的一些基本特征。

到此这篇关于详解JSON.stringify()的5个秘密特性的文章就介绍到这了,更多相关JSON.stringify()特性内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript web页面刷新的方法收集
Jul 02 Javascript
用jquery.sortElements实现table排序
May 04 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
Jun 13 Javascript
p5.js入门教程之鼠标交互的示例
Mar 16 Javascript
Vue+webpack+Element 兼容问题总结(小结)
Aug 16 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
Nov 08 Javascript
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
Jun 24 Javascript
详解Vue router路由
Nov 20 Vue.js
微信小程序实现简单文字跑马灯
May 26 #Javascript
微信小程序实现带放大效果的轮播图
May 26 #Javascript
vue实现图片上传功能
May 28 #Javascript
小程序实现图片移动缩放效果
May 26 #Javascript
jQuery实现的分页插件完整示例
May 26 #jQuery
js实现时间日期校验
May 26 #Javascript
Node.js API详解之 assert模块用法实例分析
May 26 #Javascript
You might like
URL Rewrite的设置方法
2007/01/02 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
React组件生命周期详解
2017/07/03 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
react项目实践之webpack-dev-serve
2018/09/14 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python合并多个装饰器小技巧
2015/04/28 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
师范毕业生个人求职信
2013/12/09 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
化验员岗位职责
2015/02/14 职场文书
民事起诉状范文
2015/05/19 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书