我正在编写一个脚本,我需要在不支持JSON.parse()的浏览器中解析JSON。我有严格的大小目标(总大小<20 kb)所以我不能依赖像jQuery这样的外部库。
通常的方法是使用eval(),但我担心它不安全,因为我无法控制JSON字符串(由外部源提供)。
我想到了使用脚本标签来创建我的对象的想法:
var json='{"name":"Me","age":"30"}';
var scr=document.createElement("script");
scr.innerHTML="var obj="+json;
document.body.appendChild(scr);
这似乎有效,如下所示: http://jsfiddle.net/bz8f7/
我在这里遗漏了什么吗?是否存在我的方法不起作用或不安全的情况?
注意:我知道这个方法创建了一个全局变量,对于我的用例我也很好。
答案 0 :(得分:1)
使用像JSON 3这样的JSON polyfill。这是一个正确的解析器,这意味着它不使用eval
,即使没有本机JSON支持。
答案 1 :(得分:1)
是的,确实有效。不,它与eval
具有完全相同的缺点(由于DOM,它可能更慢,如果你不想使用像JSONP那样的全局函数,它会创建一个全局变量)。
使用JSON.parse
,如果您关心旧版浏览器,请填充它。有轻量级库可以做到这一点。
答案 2 :(得分:0)
您仍在使用比eval
更复杂,效率更低的方法来评估JavaScript。它具有eval的所有安全问题。
答案 3 :(得分:0)
使用道格拉斯·克罗克福德的json2.js,在缩小之前不到20K。几乎JSON.parse()
的所有浏览器实现都是从它开始的,所以你不应该有任何兼容性问题。