JSON.parse 与 eval() 对于解析json的问题
来源:互联网 发布:youtube for mac 编辑:程序博客网 时间:2024/06/01 21:50
原文出处:http://www.cnblogs.com/zqzjs/p/4693958.html
1.eval()与JSOn.parse的不同
eval()
var c = 1; //全局变量var jsonstr1 = '{"name":"a","company":"b","value":++c}';var json1 = eval('(' + jsonstr1 + ')');console.log(json1.value); //2
c是全局变量为1,但是经过eval的解析,全局变量变成了2!(这样的写法是危险的)
JSON.parse
var c = 1; //全局变量var jsonstr1 = '{"name":"a","company":"b","value":++c}';var json2 = JSON.parse(jsonstr1);console.log(json2.value);
而JSON.parse则会报错。
2.在++c中加上双引号则就可以,因为它变成字符串了。
var c = 1; //全局变量 var jsonstr1 = '{"name":"a","company":"b","value":“++c”}'; var json2 = JSON.parse(jsonstr1); console.log(json2.value); //++c
3.我想很多人在纠结双引号的问题,这里我们就来集中测试下。
a:JSON.parse
var c = 1; //全局变量 var date = new Date(); console.log(date.toLocaleDateString()); //var jsonstr1 = '{"name":"a","company":"b","value":"++c"}';//键,值都有双引号 var jsonstr2 = '{"name":"a","company":"b","value":++c}';//仅++c上午双引号 //var jsonstr3 = '{name:"a",company:"b",value:"++c"}';//仅有值上有双引号 //var jsonstr4 = '{name:a,company:b,value:++c}';//全无双引号 //var json1 = JSON.parse(jsonstr1); var json2 = JSON.parse(jsonstr2); //var json3 = JSON.parse(jsonstr3); //var json4 = JSON.parse(jsonstr4); //console.log(json1 ); console.log(json2 ); //console.log(json3); //console.log(json4);
结果JSON.parse中只有第一种标准形式才会解析正确
b:eval()
var c = 1; //全局变量 var date = new Date(); console.log(date.toLocaleDateString()); var jsonstr1 = '{"name":"a","company":"b","value":"++c"}';//键,值都有双引号 //var jsonstr2 = '{"name":"a","company":"b","value":++c}';//仅++c上午双引号 //var jsonstr3 = '{name:"a",company:"b",value:"++c"}';//仅有值上有双引号 //var jsonstr4 = '{name:a,company:b,value:++c}';//全无双引号 var json1 = eval('('+jsonstr1+')'); //var json2 = eval('('+jsonstr2+')'); //var json3 = eval('('+jsonstr3+')'); //var json4 = eval('('+jsonstr4+')'); console.log(json1+" "+json1.value ); //[object object] ++c //console.log(json2+" "+json2.value ); //[object object] 2 //console.log(json3 + " " + json3.value); //[object object] ++c //console.log(json4+" "+json3.value); //"a"未定义
而eval中除了最后一种,其他都解析正确。
4.这时候还有一个问题:那就是为什么eval()解析的时候要加上括号?
我们先看看不加括号会怎么样:
var c = 1; //全局变量 var date = new Date(); console.log(date.toLocaleDateString()); var jsonstr1 = '{"name":"a","company":"b","value":"++c"}';//键,值都有双引号 var json1 = eval(jsonstr1); console.log(json1+" "+json1.value );
结果出错了, 那是因为eval()相当于一个执行环境,当你不加括号的时候,jsonstr1会被认为是一条复合语句。运行的时候就会逐个字符的解析。
但是加上括号的时候,jsonstr1就当做一个表达式去运算。从括号开始就被当做了对象进行识别。
5.然后你又会想到,那这个括号为什么要加“()”,不能加“{}”么?
答案是:当然能加“{}”,只不过就会报错而已~。— —!
这时候你要明白json的格式是什么!
{“name”:”a”,”company”:”b”} 这就是标准形式。
阅读全文
0 0
- JSON.parse 与 eval() 对于解析json的问题
- javascript JSON.parse 与 eval() 对于解析json (转载)
- javascript中JSON.parse()与eval()解析json的区别
- JSON.parse(json)与eval的改变
- JSON.parse() 与 eval()
- JSON.parse() 与 eval()
- JSON.parse()与eval()之间的区别
- JSON.parse()与eval()函数的区别
- JSON.parse与eval的区别
- json解析 eval() 和 JSON.parse()
- Ajax在解析Json的两种方法详解,eval()与 JSON.parse()
- JSON.parse() 与 eval() 与 JSON.stringify()
- JSON解析:JSON.stringify()、JSON.parse()和eval(string)
- 笔记:关于JSON以及解析JSON的两种方法eval()和JSON.parse()
- JSON.parse()与eval()的区别
- eval()和JSON.parse()
- 3 eval()函数与JSON.parse()区别
- JSON.parse()解析单引号错误的问题
- 注意头文件规则,避免链接错误:重复定义(multiple defination)
- Java微信分享接口开发
- JavaWeb项目系列(一):员工管理系统(SSH框架)
- CentOS下查看修改mysql编码方式(解决乱码问题)
- PAT乙级 1019. 数字黑洞 (20) 有趣的数学问题
- JSON.parse 与 eval() 对于解析json的问题
- 正确设置Ubuntu源安装最新版R软件
- 关于React-native移植到安卓上
- Hello world
- POI导入导出及动态复杂表头生成
- C++函数编译原理和成员函数的实现
- 几个经常用到的字符串的截取
- window.showModalDialog在Firefox无法支持
- 最短路