0

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

4 回答 4

1

使用 JSON polyfill,例如JSON 3。这是一个正确的解析器,这意味着它不使用eval,即使没有原生 JSON 支持。

于 2012-09-30T19:56:43.617 回答
1

是的,它确实有效。不,它具有完全相同的缺点eval(可能由于 DOM 它甚至更慢,如果您不想使用 JSONP 中的全局函数,它会创建一个全局变量)。

JSON.parse如果您关心旧版浏览器,请使用, 并填充它。有一些轻量级的库可以做到这一点。

于 2012-09-30T19:57:23.197 回答
0

您仍在评估 JavaScript,只是使用比eval. 它具有 eval 的所有安全问题。

于 2012-09-30T19:56:32.150 回答
0

使用 Douglas Crockford 的json2.js,它在缩小前小于 20K。几乎所有的浏览器实现都是JSON.parse()从它开始的,所以你不应该有任何兼容性问题。

于 2012-10-01T09:15:11.840 回答