详解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之引用类型介绍
Aug 10 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
浅谈Sticky组件的改进实现
Mar 22 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
Dec 22 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
Feb 17 Javascript
Vue多种方法实现表头和首列固定的示例代码
Feb 02 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
使用vue的transition完成滑动过渡的示例代码
Jun 25 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
Apr 17 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
Jun 24 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 Javascript
Vue中插槽slot的使用方法与应用场景详析
Jun 08 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
php垃圾代码优化操作代码
2010/08/05 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP获取文件行数的方法
2015/06/10 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
php intval函数用法总结
2019/04/14 PHP
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
详解Python中for循环的使用方法
2015/05/14 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
简单的Python人脸识别系统
2020/07/14 Python
Python如何读取、写入JSON数据
2020/07/28 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
python 递归相关知识总结
2021/03/03 Python
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
幼儿教师自我鉴定
2013/11/02 职场文书
工程业务员工作职责
2013/12/07 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
师范学院教师自荐书
2014/01/31 职场文书
六一节目主持词
2014/04/01 职场文书
班级口号大全
2014/06/09 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
科技活动周标语
2014/10/08 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
军事理论课感想
2015/08/11 职场文书