快速提问。是否需要再包含Json2 library?我现在读过哪些JavaScript支持JSON作为标准,所以不再需要解析它了吗?
Json2与标准JavaScript支持相比有哪些优点或缺点?
答案 0 :(得分:22)
JSON
已在ECMAScript 5中标准化,因此符合该规范的浏览器包括JSON
,但其他浏览器则不包括(例如之前发布的浏览器 ECMAScript 5 / IE)。如果您需要支持这些浏览器,则仍需要包含它。
具体而言,JSON
引入了:
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
背景:使用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);
}
在我们的生产代码中已经使用了很长时间。