Выведите действительный, неэкранированный JSON в представлении с Rails - PullRequest
11 голосов
/ 14 марта 2012

Я все перепробовал.Каждая комбинация помощников raw, html_safe to_json, включая некоторые попытки с ::JSON.encode и CGI.unescape.Проблема в том, что независимо от того, что я делаю, я не могу напечатать правильно сформированный JSON в виде.Это всегда экранированный HTML.

Вот код, на мой взгляд:

var campaignData<%= "=" + (raw @campaign.to_json) if @campaign %>;

В моем случае это всегда кавычки, которые экранируются как ". Я бы простосделайте gsub для кавычек, но это ужасное решение того, что IMO должен быть очень простым, хорошо документированным вариантом использования.

Ответы [ 4 ]

30 голосов
/ 01 июля 2012

Проблема здесь со строкой "=". Поскольку он считается небезопасным, он портит другую строку.

Возможно, вы можете сделать либо:

raw("=" + @campaign.to_json)

или

"= #{@campaign.to_json}".html_safe

которые примерно одинаковы.

9 голосов
/ 03 марта 2015

С ActiveSupport 2.3.3 вы можете сделать .as_json

5 голосов
/ 14 марта 2012

Вы пробовали escape_javascript?

Вот пример из файла * .haml, который я только что добавил, чтобы проверить свой ответ.

:javascript
  var foo=$.parseJSON("#{j @albums.to_json}")

Где j - этокороткий псевдоним для escape_javascript.

0 голосов
/ 01 июля 2012

Попробуйте это с помощью служебного метода

var campaignData<%=h " =#{raw @campaign.to_json}" if @campaign %>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...