【问题标题】:What is the most efficient way to parse json in jquery?在 jquery 中解析 json 的最有效方法是什么?
【发布时间】:2010-03-26 11:04:11
【问题描述】:

我正在使用 json 数据并通过 jquery 对其进行迭代并显示我的结果...

使用var jsonObj = JSON.parse(HfJsonValue);firefox 中有效,但在IE6 中无效......

HfjsonValue 是从我的aspx code behind page 返回的 json 字符串...所以我不使用 ajax...任何建议让我的 json 更好地解析并跨浏览器...

【问题讨论】:

  • JSON 是 JavaScript Object Notation,它不需要在 JS 中解析。您可以开始将其用作常规对象。
  • @RaYell 我试过了...但是没用
  • 您可能必须先eval() JSON。
  • 如果字符串中有 JSON,他必须调用 eval() 才能将其转换为对象。 JSON.parse 是一种“安全”(意味着它不会执行有害代码)的方式来解析包含 JSON 的字符串。
  • @Greg K - 使用eval 从来都不是一个好方法。它可能会产生比它解决的问题更多的问题。

标签: jquery json parsing


【解决方案1】:

大概是这个:http://api.jquery.com/jQuery.parseJSON/

var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );

...嗯,当然,这只是在您想使用 jQuery 1.4 的情况下。 :) 我认为 JSON 内置功能是对实际尝试实现标准的浏览器的一个相当新的补充。

编辑

作为后续,您可以通过调用其上的“eval”函数将 JSON 字符串转换为 JavaScript 对象:

var obj = eval('({"name":"John"})');
alert( obj.name === "John" );

这应该给出与上面的 jQuery parseJSON 相同的结果。不同之处在于 JavaScript“eval”函数将运行内部的任何代码,因此如果您的 JSON 的来源是外部站点或其他不受信任的来源,则该来源可能会将恶意代码注入您期望仅包含 JSON 的字符串中。

我相信有一个新建议,即浏览器实现内置 JSON 解析,这将在字符串上强制执行 JavaScript 对象文字格式,这将为“eval”提供一个安全的替代方案。

编辑 2

我从未真正使用过eval 来处理 JSON,因此我错误地认为我的示例可以工作。现在通过添加周围的大括号来修复它。

【讨论】:

  • 您应该在 eval 括号内包含方括号:eval('({"name":"John"})'); 如果您想要原始速度,var obj = new Function('return {"name":"John"}') 将是最快的。但是请注意,jQuery.parseJSON 检查 JSON 以确保它是有效的 JSON;而不是恶意代码。 new Functioneval 方法都没有。我会推荐 jQuery.parseJSON。
  • 你期待一个非常大的 JSON 字符串吗?如果速度确实是一个问题(即,您期望一个很大的 JSON 字符串并且需要在非常慢的机器或类似的东西上表现良好)并且您是控制 JSON 字符串的人,那么没有理由害怕使用 eval 或Matt 提到的函数语法(如果您 100% 确定 JSON 字符串将始终是有效的 JSON 且没有恶意)。但是,使用这些方法可能(可能)更难在 JSON 中找到语法错​​误。
  • 您应该注意,jquery parse 对字符串进行操作,而 eval 对对象进行操作。 eval({"I'm":"broken"}) 将工作,jQuery.parseJSON('{"I'm":"broken"}') 将失败,但 jQuery.parseJSON('{"I\'m":"broken"}') 工作。上面的 eval 示例将返回语法错误。
  • 你是对的@Error454,我已经纠正了我的例子。将 JSON 字符串与 eval 一起使用时,您必须在 JSON 字符串周围加上大括号。澄清一下,eval 确实是用于字符串,而不是对象。
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 2012-06-19
  • 2019-09-16
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2012-07-28
相关资源
最近更新 更多