详解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实战_读书笔记1—选择jQuery
Jan 22 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
Feb 11 Javascript
两个比较有用的Javascript工具函数代码
Feb 17 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
Oct 24 Javascript
jquery制作LED 时钟特效
Feb 01 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
基于javascript实现仿百度输入框自动匹配功能
Jan 03 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
JS匿名函数实例分析
Nov 26 Javascript
微信小程序开发探究
Dec 27 Javascript
简单实现bootstrap选项卡效果
Feb 08 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 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
php date()日期时间函数详解
2010/05/16 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
pygame实现成语填空游戏
2019/10/29 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
python openssl模块安装及用法
2020/12/06 Python
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
3分钟英语演讲稿
2014/04/29 职场文书
留学经费担保书
2014/05/12 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书