json.stringify()与json.parse()的区别以及用处


Posted in Javascript onJanuary 25, 2021

一、JSON.stringify()和JSON.parse() 区别

我们都用过JSON.stringify()和JSON.parse() ,从名字上就能知道
JSON.stringify()的作用是将JavaScript对象转换为JSON 字符串
JSON.parse()可以将JSON字符串转为一个对象。

通俗易懂版:

  • JSON.stringify() 将对象a转化成字符串s;
  • JSON.parse() 将字符串s转化成对象a;

简单点说,它们的作用是相对的,我用JSON.stringify()将对象a变成了字符串c,那么我就可以用JSON.parse()将字符串c还原成对象a。

let arr = [1,2,3];
JSON.stringify(arr);//'[1,2,3]'
typeof JSON.stringify(arr);//string

let string = '[1,2,3]';
console.log(JSON.parse(string))//[1,2,3]
console.log(typeof JSON.parse(string))//object

在使用JSON.parse()需要注意一点,由于此方法是将JSON字符串转换成对象,所以你的字符串必须符合JSON格式,即键值都必须使用双引号包裹:

let a = '["1","2"]';
let b = "['1','2']";
console.log(JSON.parse(a));// Array [1,2]
console.log(JSON.parse(b));// 报错

二、JSON.stringify()妙用

1.判断数组是否包含某对象,或者判断对象是否相等。

//判断数组是否包含某对象
let data = [
  {name:'掘金'},
  {name:'css学习'},
  {name:'js学习'},
  ],
  val = {name:'掘金'};
JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1; // true

//判断两数组/对象是否相等
let a = [1,2,3],
  b = [1,2,3];
JSON.stringify(a) === JSON.stringify(b);//true

2.让localStorage/sessionStorage可以存储对象。

localStorage/sessionStorage默认只能存储字符串,而实际开发中,我们往往需要存储的数据多为对象类型,那么这里我们就可以在存储时利用json.stringify()将对象转为字符串,而在取缓存时,只需配合json.parse()转回对象即可。

//存
function setLocalStorage(key,val){
  window.localStorage.setItem(key,JSON.stringify(val));
};
//取
function getLocalStorage(key){
  let val = JSON.parse(window.localStorage.getItem(key));
 window.localStorage.removeItem(key)
  return val;
};
//测试
let data = [
  {name:'掘金'},
  {name:'css学习'},
  {name:'js学习'},
  ];
setLocalStorage('STORAGEDATE',data);
let a = getLocalStorage('STORAGEDATE');

3.实现对象深拷贝

实际开发中,如果怕影响原数据,我们常深拷贝出一份数据做任意操作,其实使用JSON.stringify()与JSON.parse()来实现深拷贝是很不错的选择。

//深拷贝
function deepClone(data) {
  let _data = JSON.stringify(data),
    dataClone = JSON.parse(_data);
  return dataClone;
};
//测试
let arr = [1,2,3],
  _arr = deepClone(arr);
arr[0] = 2;
console.log(arr,_arr)//[2,2,3] [1,2,3]

到此这篇关于json.stringify()与json.parse()的区别以及用处的文章就介绍到这了,更多相关json.stringify()与json.parse()内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
Feb 26 Javascript
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
如何学习Javascript入门指导
Nov 01 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
微信小程序自动客服功能
Nov 02 Javascript
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 #Vue.js
ReactRouter的实现方法
Jan 25 #Javascript
Javascript中的奇葩知识,你知道吗?
Jan 25 #Javascript
vue 计算属性和侦听器的使用小结
Jan 25 #Vue.js
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
Jan 25 #Javascript
vue keep-alive的简单总结
Jan 25 #Vue.js
JS实现简易日历效果
Jan 25 #Javascript
You might like
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
php导出CSV抽象类实例
2014/09/24 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
Python命名空间详解
2014/08/18 Python
python异常触发及自定义异常类解析
2019/08/06 Python
Python之变量类型和if判断方式
2020/05/05 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
什么是抽象
2015/12/13 面试题
销售顾问的岗位职责
2013/11/13 职场文书
心理健康心得体会
2014/01/02 职场文书
药品促销活动方案
2014/02/14 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
关于安全的标语
2014/06/10 职场文书
社区娱乐活动方案
2014/08/21 职场文书
物理课外活动总结
2014/08/27 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
学籍证明模板
2015/06/18 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技