IE6(IE7)上的JSON


77

很抱歉,我的无能,但经过数周的熬夜并仅使我的网站在线之后,我没有任何余力来调试...我只是无法使用Google在IE6和IE7上实现JSON ...我正在使用

JSON.stringify(...)

据我了解,JSON不是内置在IE6-7上的,必须动态地以内联代码添加...您如何做到这一点?

我已经有了jQuery-我的正确理解是他们的JSON引擎依赖于浏览器本机吗?

然后对使IE6-7失败的无效JSON代码发表一些评论,但我认为它不是IE6-7的本机?

任何人?

Answers:


105

由于要使用该JSON.stringify方法,因此需要包括JSON3解析器,以便在IE <8上支持它。

该库符合ECMAScript 5th Edition规范的标准方法,并检查是否有可用的本机实现,因此在现代浏览器中将使用该本机实现。


thx-我需要仅在IE6 / 7上动态包含它的代码(也就是说,还需要浏览器检测)
David Thorisson 2010年

1
还是我误会了-也许我不需要动态使用它,因为JSON使用浏览器本机(如果可用),因此它只是一个<script src =“ json.org/json2.js ” type =“ text / javascript”> </ script>在标题中?
David Thorisson

2
@David,您只需将其包含在页面中,并且如果浏览器支持JSON全局对象,它就不会做任何事情,或者如果您只想动态地包含它if (typeof JSON == 'undefined')
Christian C.Salvadó2010年

2
我想添加jQuery.parseJSON(api.jquery.com/jQuery.parseJSON)而不是json2,因为Jquery在更多站点中使用。
Stefan

2
@Stefan jQuery不会进行字符串化,它只是进行解析,这是不同的
Benjamin Gruenbaum 2013年

2

一定有一些误会。对象表示法已经在JavaScript中使用了一段时间了(据我所知,这是JavaScript的核心概念)。我的意思是,可以像var o= {a:"b"};
So这样编写代码,如果您可以执行此操作,则还可以调用它eval('var o= {a:"b"};'),这就是在任何浏览器中“实现JSON”的方式。

更新:重新阅读您的文章,最后明白问题是序列化对象,而不是反序列化它们。然后您可以为此使用JavaScript库:https : //github.com/douglascrockford/JSON-js/blob/master/json2.js


@David,如果您从某个外部数据源接收JSON数据,我认为这是唯一的选择。是不是
naivists

如果您想从外部数据源加载数据,Eval是最糟糕的选择,它使您容易遭受脚本注入攻击。如果需要JSON对象兼容性,则可以使用json2.js。
mikerobi

mikerobi,感谢您的评论(但不推荐)。请注意,json2.js也会在内部调用eval(请参阅github.com/douglascrockford/JSON-js/blob/master/json2.js#L471)尽管Crockford声明它反对执行,但我仍然相信可能解决这个问题的方法。
naivists


1

“动态添加的内联代码”使用的是Douglas Crockfords json2库提供的功能,如果浏览器版本本身不支持jQuery,则使用jQuery自己的实现。

jQuery不依赖浏览器提供的任何JSON解码功能。如果浏览器确实支持JSON解码,那么jQuery将使用它。


可以使用jQuery很好,因为它已经包含在内,但是为什么JSON.stringify(...)在IE6-7上不起作用,jQuery JSON是否有一些特殊语法?
David Thorisson

JSON.stringify确实适用于IE6-7,前提是您已添加脚本:\
Matt

在IE7中,我得到:SCRIPT5009:使用此方法且不包括JSON库时,“ JSON”是未定义的jquery-1.8.0.min.js,第2行字符16953。
Anders Branderud 2013年

@AndersBranderud:事实并非如此。jQuery明确提供了一个后备。如果您可以在最新版本的jQuery(1.9.0b)中重现此行为,则可以考虑提交错误
2013年

@Matt,谢谢!我提交了一个错误报告:使用Jquery 1.9.0以及jquery-1.8.0.min.js:调用方法jQuery.parseJSON'的原因是:“ SCRIPT5009:'JSON'是未定义的jquery-1.8.0.min .js,第2行字符16953”在IE 7中(我使用IE9和IE7作为“文档版本”)。
Anders Branderud 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.