详解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 相关文章推荐
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
jQuery实现倒计时按钮功能代码分享
Sep 03 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
学习JavaScript设计模式之中介者模式
Jan 14 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
微信小程序之事件交互操作实例分析
Dec 03 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
微信小程序整个页面的自动适应布局的实现
Jul 12 Javascript
微信小程序实现简单文字跑马灯
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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
php并发加锁示例
2016/10/17 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
什么时候需要进行强制类型转换
2016/09/03 面试题
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
三年级科学教学反思
2014/01/29 职场文书
安全生产月活动总结
2014/05/04 职场文书
学生检讨书
2015/01/27 职场文书
《废话连篇——致新手》——chinapizza
2022/04/05 无线电
Java设计模式之代理模式
2022/04/22 Java/Android