使用单引号的转义将活动记录对象解析为json(撇号)

时间:2016-02-24 13:12:04

标签: javascript ruby-on-rails json

我正在尝试将rails活动记录关系解析为json。

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}]"'

问题在于用户名列中的值包含&#34;&#39;&#34; (撇号)打破单引号和双引号的链,因此从javascript解析它时会抛出错误。

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

问题在于&#39;&lt;%= raw User.all.to_json%&gt;&#39; 它被转换为

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

因此&#39;之后的部分逃脱了。

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

2 个答案:

答案 0 :(得分:5)

您应该使用escape_javascript中提供的ActionView::Helpers::JavaScriptHelper功能。

你可以阅读它here,但基本的是它逃脱回车以及JavaScript段的单引号和双引号。

所以,你最终得到的是:

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

答案 1 :(得分:0)

通常每当我们在ruby中将哈希转换为json时,它会尝试通过产生解析错误来转义引号。解决这个问题的一种方法是打印哈希并调用to_json方法。

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

点击here了解详情。