用于解析JSON的脚本标记:它有效吗?

时间:2012-09-30 19:54:05

标签: javascript json parsing eval

我正在编写一个脚本,我需要在不支持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/

我在这里遗漏了什么吗?是否存在我的方法不起作用或不安全的情况?

注意:我知道这个方法创建了一个全局变量,对于我的用例我也很好。

4 个答案:

答案 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()的所有浏览器实现都是从它开始的,所以你不应该有任何兼容性问题。