快问.是否还需要包含Json2库?我现在读过哪些JavaScript支持JSON作为标准,所以不再需要解析它吗?
Json2与标准JavaScript支持相比有什么优缺点?
Mat*_*att 22
JSON在ECMAScript 5中标准化,因此符合该规范的JSON浏览器包括,但其他浏览器不包括(例如在 ECMAScript 5/IE 之前发布的浏览器).如果您需要支持这些浏览器,则仍需要包含它们.
具体来说,JSON介绍如下:
json2.js 检查是否JSON.parse已经实施,如果没有,则仅提供实施; 所以把它想象成旧浏览器的一种polyfiller.
来源:http://kangax.github.com/es5-compat-table/,http://caniuse.com/#feat=json
rob*_*cat 10
更新:现在IE8上的每个人都应该有补丁(或者病毒!),所以如果您在文档模式8或更高版本中支持IE8 +,那么我建议删除Json2库并使用原生JSON.stringify()代替.
在各种情况下,您需要使用json2库:
IE10,IE9,IE8:如果文档使用IE7模式或兼容模式,则必须使用json2.如果您的文档可以是iframe或框架,您可能需要测试如果主机框架处于IE7模式会发生什么(文档模式和框架发生奇怪的错误!).
IE8 - 使用json2是避免未修补的IE8中的错误的最可靠方法.在JSON.stringify()和JSON.parse()的缺陷已修补了几年,但一些消费者将缺少补丁,和您的客户将获得undebuggable错误,这是非常不可取的(参见下面的可能的解决方法).
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-编辑草稿,specification.aspx
可以使用以下方法检测Buggy版本:
var kb976662bug = (document.documentMode === 8) && (JSON.stringify(document.createElement('input').value) === '"null"';
Run Code Online (Sandbox Code Playgroud)
影响我们的唯一一个角落案例是由于生成一个空字符串"null"而不是"".所以我们删除了JSON2库,而是使用了一个代码如下的解决方法:
if (kb976662bug) {
return JSON.stringify(o, function(k, v) {
return (v === '') ? '' : v;
});
} else {
return JSON.stringify(o);
}
Run Code Online (Sandbox Code Playgroud)
这在我们的生产代码中已经工作了很长时间.