javascript中JSON.parse()与eval()解析json的区别


Posted in Javascript onMay 19, 2016

本文实例讲述了javascript中JSON.parse()与eval()解析json的区别。分享给大家供大家参考,具体如下:

JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是Javascript原生格式,这意味着在javascript中处理JSON数据

基本格式:

varjsonData='{"data1":"Hello,","data2":"world!"}'

调用方法jsonData.data1,jsonData.data2

很多json数据存入数组

var jsonData=[
 {"name":"LiLei","age":19,"sex":"male"},
 {"name":"HanMei","age":18,"sex":"famale"}
]

调用方法jsonData[0].name,jsonData[1].sex

总体而言,json是相对比较容易的理解和使用的,但同时存在很多的陷阱,如果不注意的话很容易掉进去。

json的的解析方法

json的解析方法共有两种:eval() 和 JSON.parse(),使用方法如下:

var jsonData = '{"data1":"Hello,", "data2":"world!}';
var evalJson=eval('('+jsonData+')');
var jsonParseJson=JSON.parse(jsonData);

这样就把jsonData这个json格式的字符串转换成了JSON对象。

二者的区别如下:

var value = 1;
var jsonstr = '{"data1":"hello","data2":++value}';
var data1 = eval_r('('+jsonstr+')');
console.log(data1);//这时value值为2
var data2=JSON.parse(jsonstr);
console.log(data2);//报错

javascript中JSON.parse()与eval()解析json的区别

可以看到控制输出台的结果,第一个eval()顺利执行,第二个报错了。从上例就可以明显地看出,eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),如上例中,由于用eval解析一个json字符串而造成原先的value的值改变。

《高性能Javascript》(本站下载地址:https://3water.com/books/36680.html)一书即指出:

警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。

更多关于JavaScript相关内容可查看本站专题:《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
在线编辑器中换行与内容自动提取
Apr 24 Javascript
Javascript中的isNaN函数使用说明
Nov 10 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 Javascript
JavaScript使用Range调色及透明度实例
Sep 25 Javascript
JavaScript事件处理程序详解
Sep 19 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
JavaScript比较同一天的时间大小实例代码
Feb 09 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
微信小程序实现简单表格
Feb 14 Javascript
Vue extend的基本用法(实例详解)
Dec 09 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 Javascript
js获取Html元素的实际宽度高度的方法
May 19 #Javascript
js获取隐藏元素宽高的实现方法
May 19 #Javascript
jquery实现无刷新验证码的简单实例
May 19 #Javascript
AngularJs解决跨域问题案例详解(简单方法)
May 19 #Javascript
JavaScript:Array类型全面解析
May 19 #Javascript
JavaScript:Date类型全面解析
May 19 #Javascript
javascript中对Date类型的常用操作小结
May 19 #Javascript
You might like
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php 过滤器实现代码
2010/08/09 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
Python获取邮件地址的方法
2015/07/10 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Python 处理图片像素点的实例
2019/01/08 Python
python实现控制台打印的方法
2019/01/12 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
类的返射机制中的包及核心类
2016/09/12 面试题
应用心理学个人求职信范文
2013/12/11 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
写给领导的感谢信
2015/01/22 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
中学教代会开幕词
2016/03/04 职场文书
Go语言怎么使用变长参数函数
2022/07/15 Golang
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技