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 相关文章推荐
JS 实现点击a标签的时候让其背景更换
Oct 15 Javascript
js星星评分效果
Jul 24 Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 Javascript
js文字横向滚动特效
Nov 11 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
jQuery排序插件tableSorter使用方法
Feb 10 Javascript
Vue中建立全局引用或者全局命令的方法
Aug 21 Javascript
react-native fetch的具体使用方法
Nov 01 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
基于Layui自定义模块的使用方法详解
Sep 14 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
关于js注册事件的常用方法
2013/04/03 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
python字符串排序方法
2014/08/29 Python
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
python实现拼接图片
2020/03/23 Python
Python绘制数码晶体管日期
2021/02/19 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
关于Java finally的面试题
2016/04/27 面试题
学习十八大报告感言
2014/02/04 职场文书
服务员岗位责任制
2014/02/11 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
保健品市场营销方案
2014/03/31 职场文书
国贸专业求职信
2014/06/28 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
优秀志愿者感言
2015/08/01 职场文书
初中英语教学随笔
2015/08/15 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
详解 TypeScript 枚举类型
2021/11/02 Javascript