【问题标题】:Parsing active record object to json with escape of single quote (apostrophe)使用转义单引号(撇号)将活动记录对象解析为 json
【发布时间】:2016-02-24 13:12:04
【问题描述】:

我正在尝试解析与 json 的 Rails 活动记录关系。

jQuery('.user_form').data('mydata', '<%= raw User.all.to_json %>');
var myPersonalData = JSON.parse(jQuery('.user_form').data('mydata'));

这是我的 rails 对象

'"[{\"id\":1,\"email\":\"1@2.com\",\"created_at\":\"2016-02-24T12:39:29.184Z\",\"updated_at\":\"2016-02-24T12:39:29.184Z\",\"username\":\"xyz's\",\"skypeid\":null},{\"id\":2,\"email\":\"3@2.com\",\"created_at\":\"2016-02-24T12:39:41.455Z\",\"updated_at\":\"2016-02-24T12:39:41.455Z\",\"username\":\"abs's\",\"skypeid\":null}]"'

问题在于用户名列中的值包含“'”(撇号),它破坏了单引号和双引号链,因此在从 javascript 解析它时会引发错误。

SyntaxError: missing ) after argument list path/to/file:linenumber

问题在于“” 它被转换为

' "object_attribut\": \" value_with'apostrophe" '

因此 ' 之后的部分被转义了。

感谢任何帮助。提前致谢。

【问题讨论】:

  • 你可以改用这个 to_a, &lt;%= raw User.all.to_a %&gt;.
  • @Sahil,为什么我们需要to_a,根据问题,我猜我们需要将json 发送到javascript
  • 很抱歉它给出了二维数组。

标签: javascript ruby-on-rails json


【解决方案1】:

你应该使用ActionView::Helpers::JavaScriptHelper中提供的escape_javascript函数。

你可以阅读它here,但基本原理是它为 JavaScript 段转义回车和单引号和双引号。

那么,你最终会得到的是:

jQuery('.user_form').data('mydata', '<%= raw escape_javascript(User.all.to_json) %>');

【讨论】:

  • 没问题。 ERB 也为此提供了一些快捷方式:您也可以改为:'&lt;%==j User.all.to_json %&gt;'。额外的等号是raw 的快捷方式,jescape_javascript 的快捷方式
【解决方案2】:

通常,当我们在 ruby​​ 中将哈希转换为 json 时,它会尝试转义引号,从而产生解析错误。解决此问题的一种方法是打印散列并在其上调用 to_json 方法。

<%= (puts User.all).to_json %>

点击here阅读更多内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2019-10-14
    • 2015-10-16
    • 1970-01-01
    • 2018-09-21
    • 2018-09-05
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多