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.validate 常用方法及需要注意的问题
Mar 20 Javascript
JS实现div居中示例
Apr 17 Javascript
浅析jQuery EasyUI中的tree使用指南
Dec 18 Javascript
javascript动态创建及删除元素的方法
Dec 22 Javascript
Javascript与jQuery方法的隐藏与显示
Jan 19 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
如何在JS中实现相互转换XML和JSON
Jul 19 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
js实现转动骰子模型
Oct 24 Javascript
vue操作dom元素的3种方法示例
Sep 20 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开发GUI
2006/10/09 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
jQuery find和children方法使用
2011/01/31 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
webpack 模块热替换原理
2018/04/09 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
PHP webshell检查工具 python实现代码
2009/09/15 Python
python url 参数修改方法
2018/12/26 Python
自学python的建议和周期预算
2019/01/30 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
英国在线花园中心:You Garden
2018/06/03 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
英语专业毕业个人求职自荐信
2013/09/21 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书