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 相关文章推荐
brook javascript框架介绍
Oct 10 Javascript
jQuery获得指定元素坐标的方法
Apr 14 Javascript
轻量级网页遮罩层jQuery插件用法实例
Jul 31 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
Dec 17 Javascript
Javascript基础学习笔记(菜鸟必看篇)
Jul 22 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
Feb 13 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
JS模拟浏览器实现全局搜索功能
Sep 11 Javascript
Vue Extends 扩展选项用法完整实例
Sep 17 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
微信小程序静默登录的实现代码
Jan 08 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
PHP date函数参数详解
2006/11/27 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
建筑项目策划书
2014/01/13 职场文书
信息总监管理职责范本
2014/03/08 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
golang使用map实现去除重复数组
2022/04/14 Golang