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 面向对象的JavaScript类
May 04 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
Sep 29 Javascript
javascript轻量级模板引擎juicer使用指南
Jun 22 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
DWR中各种java方法的调用
May 04 Javascript
超链接怎么正确调用javascript函数
May 23 Javascript
JavaScript组件开发之输入框加候选框
Mar 10 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
vue观察模式浅析
Sep 25 Javascript
vue.js父子组件通信动态绑定的实例
Sep 28 Javascript
js实现移动端图片滑块验证功能
Sep 29 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
论建造顺序的重要性
2020/03/04 星际争霸
ThinkPHP中redirect用法分析
2014/12/05 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
Javascript继承机制的设计思想分享
2011/08/28 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Django中几种重定向方法
2015/04/28 Python
python中assert用法实例分析
2015/04/30 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
应届毕业生自荐信
2014/05/28 职场文书
理发店策划方案
2014/06/05 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
综合测评个人总结
2015/03/03 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby