还需要Json2 / Json3库吗?

时间:2012-03-16 11:06:21

标签: javascript json

快速提问。是否需要再包含Json2 library?我现在读过哪些JavaScript支持JSON作为标准,所以不再需要解析它了吗?

Json2与标准JavaScript支持相比有哪些优点或缺点?

2 个答案:

答案 0 :(得分:22)

JSON已在ECMAScript 5中标准化,因此符合该规范的浏览器包括JSON,但其他浏览器则不包括(例如之前发布的浏览器 ECMAScript 5 / IE)。如果您需要支持这些浏览器,则仍需要包含它。

具体而言,JSON引入了:

  • IE8,
  • FireFox 3.5 -
  • Opera 10.5。
  • Chrome(1)(AFAIK)

json2.js checks JSON.parse是否已经实施,如果没有,则只提供它的实施;所以把它想象成旧浏览器的一种polyfiller。

来源:http://kangax.github.com/es5-compat-table/http://caniuse.com/#feat=json

答案 1 :(得分:10)

更新:现在IE8上的每个人都应该有补丁(或者病毒!),所以如果你在文件模式8或更高版本中支持IE8 +,那么我建议删除Json2库并使用原生JSON.stringify()代替。

在各种情况下,您需要使用json2库:

  • IE10,IE9,IE8:如果文档使用 IE7模式兼容模式,则必须使用json2。如果你的文档可以是 iframe '或框架,你可能需要测试如果主机框架处于IE7模式会发生什么(文件模式和框架会发生奇怪的事情!)。

    < / LI>
  • IE8 - 使用json2是避免未修补的IE8 中的错误的最可靠方法。 JSON.stringify()和JSON.parse()中的错误已经修补了几年,但是一些消费者会错过补丁,并且您的客户将得到不可判断的错误,这是非常不受欢迎的(请参阅下面的可能的解决方法)。 / p>

  • IE7 - 您需要使用json2。

  • 其他各种旧浏览器需要json2,例如iPhone 1.有关原生支持的详细分类,请在此处勾选“显示所有浏览器”选项:http://caniuse.com/#search=JSON

未修补的IE8

的替代方法

背景:使用jscript.dll的旧版IE8(例如5.8.6001.18702)在JSON实现中存在各种错误和非标准行为。 http://support.microsoft.com/kb/976662(jscript.dll 5.8.6001.22960)修补了这些错误。这些错误也在以后的jscript.dll版本5.8.6001.23141中修复(我不知道哪个KB与此相关)。这里讨论了一些问题:http://blogs.msdn.com/b/jscript/archive/2009/06/23/serializing-the-value-of-empty-dom-elements-using-native-json-in-ie8.aspx和此处:http://blogs.msdn.com/b/jscript/archive/2009/06/23/native-json-support-in-ie8-and-tracking-the-ecmascript-fifth-edition-draft-specification.aspx

可以使用以下方法检测Buggy版本:

var kb976662bug = (document.documentMode === 8) && (JSON.stringify(document.createElement('input').value) === '"null"';

影响我们的唯一角落案例是由于空字符串生成"null"而不是""。所以我们删除了JSON2库,而是使用代码如下的解决方法:

if (kb976662bug) {
    return JSON.stringify(o, function(k, v) {
        return (v === '') ? '' : v;
    });
} else {
    return JSON.stringify(o);
}

在我们的生产代码中已经使用了很长时间。