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之大字符串的连接的StringBuffer 类
May 08 Javascript
javascript 函数调用的对象和方法
Jul 01 Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
js生成随机数方法和实例
Jan 17 Javascript
canvas绘制环形进度条
Feb 23 Javascript
javascript  数组排序与对象排序的实例
Jul 17 Javascript
vue ssr 指南详读
Jun 29 Javascript
JS实现简单的表格增删
Jan 16 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
Aug 31 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
Nov 02 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二分法查找数组是否包含某一元素
2013/05/23 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
为超链接加上disabled后的故事
2010/12/10 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
javascript常用方法汇总
2014/12/02 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
javascript 作用于作用域链的详解
2017/09/27 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
python字符串与url编码的转换实例
2018/05/10 Python
Python切片操作深入详解
2018/07/27 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
python通过实例讲解反射机制
2019/10/17 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
医学专业毕业生个人的求职信
2013/12/04 职场文书
求职信的要素有哪些呢
2013/12/26 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2014年生产部工作总结
2014/12/17 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
详解Python生成器和基于生成器的协程
2021/06/03 Python
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技