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中的集合及效率
Jan 08 Javascript
jQuery入门知识简介
Mar 04 Javascript
JS获取当前网址、主机地址项目根路径
Nov 19 Javascript
jQuery中阻止冒泡事件的方法介绍
Apr 12 Javascript
在JavaScript中处理数组之reverse()方法的使用
Jun 09 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
Jun 25 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
Jul 01 Javascript
js关于getImageData跨域问题的解决方法
Oct 14 Javascript
深入剖析Express cookie-parser中间件实现示例
Feb 01 Javascript
解决vue-router中的query动态传参问题
Mar 20 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
Feb 11 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
把77A收信机改造成收音机
2021/03/02 无线电
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
给幼儿园老师的表扬信
2014/01/19 职场文书
运动会广播稿400字
2014/01/25 职场文书
给国外客户的邀请函
2014/01/30 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
计算机毕业生求职信
2014/06/10 职场文书
房产公证委托书范本
2014/09/20 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
运动会闭幕式致辞
2015/07/29 职场文书