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 相关文章推荐
jquery获取input表单值的代码
Apr 19 Javascript
div层的移动及性能优化
Nov 16 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
阻止表单提交按钮多次提交的完美解决方法
May 16 Javascript
JavaScript第一篇之实现按钮全选、功能
Aug 21 Javascript
浅谈js中的this问题
Aug 31 Javascript
基于dataset的使用和图片延时加载的实现方法
Dec 11 Javascript
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
微信小程序身份证验证方法实现详解
Jun 28 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中文验证码实现方法
2015/06/18 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
微信小程序之选项卡的实现方法
2017/09/29 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
Sanic框架安装与简单入门示例
2018/07/16 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
公司年会演讲稿范文
2014/01/11 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
申论倡议书范文
2014/05/13 职场文书
培训研修方案
2014/06/06 职场文书
会计毕业生自荐书
2014/06/12 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书