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 相关文章推荐
IE与Firefox下javascript getyear年份的兼容性写法
Dec 20 Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 Javascript
TypeError document.getElementById(...) is null错误原因
May 18 Javascript
全国省市二级联动下拉菜单 js版
May 10 Javascript
深入浅析jQuery对象$.html
Aug 22 Javascript
jQuery中 $ 符号的冲突问题及解决方案
Nov 04 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
解决修复npm安装全局模块权限的问题
May 17 Javascript
vue+element UI实现树形表格带复选框的示例代码
Apr 16 Javascript
Layui表格监听行单双击事件讲解
Nov 14 Javascript
原生Vue 实现右键菜单组件功能
Dec 16 Javascript
JavaScript选择器函数querySelector和querySelectorAll
Nov 27 Javascript
使用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
Smarty模板快速入门
2007/01/04 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
js 金额文本框实现代码
2012/02/14 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
python代码制作configure文件示例
2014/07/28 Python
python中字符串前面加r的作用
2015/06/04 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
python ddt实现数据驱动
2018/03/14 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
实习单位鉴定意见
2015/06/04 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
MySQL 计算连续登录天数
2022/05/11 MySQL
win10搭建配置ftp服务器的方法
2022/08/05 Servers