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

Man*_*shh 2 javascript json ruby-on-rails

我试图解析与json的rails活动记录关系.

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

这是我的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}]"'
Run Code Online (Sandbox Code Playgroud)

这个问题是在用户名列中,值包含"'"(撇号),它打破了单引号和双引号的链,因此在从javascript解析它时会抛出错误.

SyntaxError: missing ) after argument list path/to/file:linenumber
Run Code Online (Sandbox Code Playgroud)

这个问题是'<%= raw User.all.to_json%>'它被转换为

' "object_attribut\": \" value_with'apostrophe" '
Run Code Online (Sandbox Code Playgroud)

因此,'逃脱之后的部分.

任何帮助表示赞赏.提前致谢.

小智 5

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

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

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

jQuery('.user_form').data('mydata', '<%= raw escape_javascript(User.all.to_json) %>');
Run Code Online (Sandbox Code Playgroud)