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 通过json自动生成Dom的代码
Apr 01 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
jQuery实现“扫码阅读”功能
Jan 21 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
Mar 09 Javascript
js实现类似jquery里animate动画效果的方法
Apr 10 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
Nov 17 Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 Javascript
jqgrid实现简单的单行编辑功能
Sep 30 Javascript
利用hasOwnProperty给数组去重的面试题分享
Nov 05 Javascript
js如何获取图片url的Blob值并预览示例代码
Mar 07 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
Oct 27 Javascript
Vue 3.0中jsx语法的使用
Nov 13 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脚本数据库功能详解(中)
2006/10/09 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
js实现图片轮播效果
2015/12/19 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
全面解析vue中的数据双向绑定
2017/05/10 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
Vue实现验证码功能
2019/12/03 Javascript
Vue的Options用法说明
2020/08/14 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
Python实现的科学计算器功能示例
2017/08/04 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
简单了解python协程的相关知识
2019/08/31 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
高三励志标语
2014/06/05 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
加入学生会自荐书
2015/03/05 职场文书
学校捐款活动总结
2015/05/09 职场文书
学校运动会开幕词
2016/03/03 职场文书
python实现简单的井字棋
2021/05/26 Python