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 相关文章推荐
javascript获取隐藏dom的宽高 具体实现
Jul 14 Javascript
js控制文本框只输入数字和小数点的方法
Mar 10 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
Vue实例简单方法介绍
Jan 20 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
jQuery实现的两种简单弹窗效果示例
Apr 18 jQuery
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使用PHPexcel导入导出数据的方法
2015/11/14 PHP
iOS10推送通知开发教程
2016/09/19 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
简单了解OpenCV是个什么东西
2017/11/10 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
python命令行工具Click快速掌握
2019/07/04 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
详解python tkinter模块安装过程
2020/01/06 Python
基于python图像处理API的使用示例
2020/04/03 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
html5唤起app的方法
2017/11/30 HTML / CSS
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
生物化工专业个人自荐信
2013/09/26 职场文书
网络研修随笔感言
2014/02/17 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android