【问题标题】:How can I use JavaScript to parse Ruby JSON string如何使用 JavaScript 解析 Ruby JSON 字符串
【发布时间】:2012-04-09 14:58:44
【问题描述】:

我正在尝试从 Rails 应用程序的 JSON 输出字符串中获取 JSON 对象。目前我正在使用 JavaScript:

data = "<%= @chromosomes.html_safe %>";

但是,由于 JSON 对象的开头和结尾都有引号,因此它不会被呈现为 JSON 对象。相反,它正在做类似的事情

 data = "[{"name":"YHet","organism_id":"4ea9b90e859723d3f7000037"}]"

有没有办法可以删除开头和结尾的引号,以便将对象视为数组而不是字符串?

【问题讨论】:

  • 我不知道“html_safe”的确切含义,但请注意,当您使用 HTML 安全转义符(“<”表示“
  • @Pointy 在这种情况下使用html_safe 可能是正确的,因为他可能想要[{"name":"&amp;lt;script src='badwebsite.com/bad.js'&amp;gt;&amp;lt;/script&amp;gt;","organism_id":"..."}] 而不是[{"name":"&lt;script src='badwebsite.com/bad.js'&gt;&lt;/script&gt;","organism_id":"..."}]。
  • @alpha123 是的,有时使用 HTML 转义是正确的,但并非总是如此;例如,如果“organism_id”可以包含 HTML 字符,如果该字符串纯粹是为了在 JavaScript 代码中工作而从不注入 HTML 中,那么替换它们可能是错误的。
  • @Pointy 正确,虽然看起来 organism_id 是一个哈希或 GUID 或其他不包含 或 & 的东西,name 可能会在某个时候被注入 HTML .我会说逃跑。

标签: javascript ruby-on-rails json


【解决方案1】:

你为什么不这样做:

data = <%= @chromosomes.html_safe %>;

旁注:

我希望你做这样的事情:

@chromosomes = [{ name: "YHet", organism_id: "foo" }].to_json

【讨论】:

  • 我可以,但是 JavaScript 无法识别
  • 这显然是最好的做法;如果它已经是 JSON,则应该直接将其放入 JavaScript 源代码中而无需额外的引号。 @PhillipWhisenhunt 不是 JavaScript 可以在这里识别 &lt;%= %&gt;;这是您的服务器端框架。如果它现在在双引号内工作,那么没有它们也可以工作。
  • @PhillipWhisenhunt 嗯,这就是重点。 ERb 进入并处理从&lt;% 开始并以%&gt; 结束的所有内容在文件发送到客户端之前。
  • 正确。这是最好的方法,删除引号可以解决问题。哎呀哈哈,@alpha123 有一个大脑袋放屁!编码到凌晨!
【解决方案2】:

如果您使用的是 jQuery,您可以执行以下操作

var data = jQuery.parseJSON('[{"name":"YHet","organism_id":"4ea9b90e859723d3f7000037"}]');

【讨论】:

    【解决方案3】:

    使用评估:

    var dataObject = eval('(' + dataString + ')');

    【讨论】:

      【解决方案4】:

      使用大多数浏览器中包含的 JSON 对象,或者如果您使用 jQuery,请使用 $.jsonParse 方法,如果定义了其他方法,则尝试使用 JSON 对象,使用 eval 或更安全的方式进行解析。

      【讨论】:

        【解决方案5】:

        在控制器上

        @my_var = MyObj.find_by_id(4).to_json
        

        以haml方式在页面上。

        var my_json = $.parseJSON("#{j @my_var}"); //used JQuery to parser JSON string
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-28
          • 1970-01-01
          • 2023-04-08
          相关资源
          最近更新 更多