JSON.parse和eval的区别
JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是Javascript原生格式,这意味着在javascript中处理JSON数据不需要任何特殊的API或工具包,而且效率非常高。
基本格式:
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_r() 和 JSON.parse(),使用方法如下:
var jsonData = '{"data1":"Hello,", "data2":"world!}';
var evalJson=eval_r('('+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);//报错
可以看到控制输出台的结果,第一个eval_r()顺利执行,第二个报错了。从上例就可以明显地看出,eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),如上例中,由于用eval解析一个json字符串而造成原先的value的值改变。
《高性能Javascript》一书即指出:
警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。
转载于:https://www.cnblogs.com/eason1999/p/5527413.html
JSON.parse和eval的区别相关推荐
- JSON.parse()和eval()的区别
json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢? JSON.parse()之可以解析json格式的数据,并且会对要解析 ...
- JSON.parse与eval的区别
JSON.parse与eval和能将一个字符串解析成一个JSON对象,但还是有挺大区别. 测试代码 var A = "{ a: 1 , b : 'hello' }"; var B ...
- javascript JSON.parse和eval的区别
SON.parse()用来将标准json字符串转换成js对象:eval()除了可以将json字符串(非标准的也可以,没有JSON.parse()要求严格)转换成js对象外还能用来动态执行js代码.例如 ...
- JSON.parse()、eval()、JSON.stringify()、jQuery.parseJSON()的用法
一: JSON数据的两种解析方法 JSON.parse() .eval ()方法 1 :JSON.parse() : 用于将一个 JSON 字符串转换为 JavaScript 对象. var str ...
- JSON.parse和evel的区别
我们将一个字符串解析成json对象时可以使用两种方法: 假设我们有一个json格式的字符串: '{ "student" : [ {"name":"鸣人 ...
- JSON.parse()、eval()和JSON.stringify()
1.什么是JSON? JSON全称是JavaScript Object Notation,是一种轻量级的数据交换格式.JSON 与XML具有相同的特性,是一种数据存储格式,但是JSON相比XML 更易 ...
- JSONObject JSONArray各种用法以及js eval()函数与JSON.parse的区
2019独角兽企业重金招聘Python工程师标准>>> 一.在后台使用JSONObject对象,并将从数据库中取出来的数据直接使用 JSONObject的put方法放进去,再将这个J ...
- JSON.parse()和jQuery.parseJSON()的区别
jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的JavaScript对象 (jquery 方法) 1 2 3 var str = '[{& ...
- eval、json.parse()的介绍和使用注意点
原文:eval.json.parse()的介绍和使用注意点 eval和json.parse的使用 eval:来源于官网 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScri ...
- json.stringify()与json.parse()的区别,json.stringify()的妙用
一.JSON.stringify()与JSON.parse()的区别 最近做项目,发现JSON.stringify()使用场景真的挺多,我们都知道JSON.stringify()的作用是将 JavaS ...
最新文章
- 零基础怎么学UI设计
- Linux备份检查工具,6种优化Linux系统备份的应用与技巧
- 发布新的个人博客地址和微信公众号
- Linux上搭建h2引擎加载h2文件
- 2010年下半年软件评測师(下午)试题分析与解答
- python基本数据类型(一)-python3.0学习笔记
- 微软已成全球SaaS老大,谁将成为中国SaaS行业龙头
- Java私塾中级note
- java非主流火星文输入法_火星文输入法
- docker批量导入导出镜像
- python画circos图_CIRCOS圈图绘制 – 最简单绘图和解释
- 【转】Knowledge-Distillation 知识蒸馏论文集合
- composer 与php autoload,命名空间
- 还不重视!脸上有螨虫的几种表现?
- 用狼的处世哲学做SOHO 一
- 工程机械租赁商如何对世界各地设备进行统一集中管理
- 5gh掌上云计算认证不通过_华为云计算认证含金量怎么样?
- 攻防世界-Misc-新手练习记录
- halcon中放大图片
- 新玺配资:热点轮动明显 均衡配置策略