Как я могу использовать JavaScript для разбора строки Ruby JSON

Я пытаюсь получить объект JSON из выходной строки JSON из приложения Rails. В настоящее время в JavaScript я делаю:

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

Однако, поскольку в начале и конце объекта JSON имеются кавычки, он не отображается как объект JSON. Вместо этого он делает что-то вроде

<code> data = "[{"name":"YHet","organism_id":"4ea9b90e859723d3f7000037"}]"
</code>

Есть ли способ удалить начальные и конечные кавычки, чтобы объект обрабатывался как массив, а не строка?

 Peter C09 апр. 2012 г., 17:25
@ Правильно, хотя выглядит такorganism_id это хеш, GUID или что-то еще, не содержащее & lt; или & gt; или & amp; иname вероятно, будет введен в HTML в какой-то момент. Я бы сказал, бежать.
 Peter C09 апр. 2012 г., 17:11
@Pointy в этом случае, вероятно, правильно использоватьhtml_safe, так как он, вероятно, хочет[{"name":"&lt;script src='badwebsite.com/bad.js'&gt;&lt;/script&gt;","organism_id":"..."}] вместо[{"name":"<script src='badwebsite.com/bad.js'></script>","organism_id":"..."}].
 Pointy09 апр. 2012 г., 17:21
@ alpha123 да, иногда правильно использовать экранирование HTML, но не всегда; например, если «organ_id» может содержать символы HTML, их замена может быть неправильной, если эта строка предназначена исключительно для работы внутри кода JavaScript и никогда не вводится в HTML.
 Pointy09 апр. 2012 г., 17:04
Я не знаю, что такое "html_safe" означает, что именно, но так же, как примечание, это & APOS; S не обязательно правильно использовать HTML-безопасный побег (& Quot; & амп; л; & Quot; для & Quot; & л; & Quot; и т.д.), когда & APOS; повторное падение что-то непосредственно в источник JavaScript.

Ответы на вопрос(5)

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

var data = jQuery.parseJSON('[{"name":"YHet","organism_id":"4ea9b90e859723d3f7000037"}]');
Решение Вопроса

Почему вы не делаете:

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

Примечание:

Я надеюсь, что вы делаете что-то вроде:

@chromosomes = [{ name: "YHet", organism_id: "foo" }].to_json
 09 апр. 2012 г., 17:07
@PhillipWhisenhunt Гм, вот в чем дело. ERb входит и обрабатывает все, начиная с<% и заканчивая%> before the file gets sent to the client.
 Phillip Whisenhunt09 апр. 2012 г., 17:30
Правильный. Это лучший способ сделать это, удалив кавычки, чтобы устранить проблему. Ууууууууууу, у @ alpha123 был большой мозговой пердеть! Кодирование до раннего утра!
 09 апр. 2012 г., 17:05
Это явно лучшее, что нужно сделать; если это уже JSON, его нужно просто добавить непосредственно в источник JavaScript без дополнительных кавычек. @PhillipWhisenhunt это не JavaScript, который распознает<%= %> Вот; это ваша серверная структура. Если он работаетinside теперь двойные кавычки, они будут работать без них.
 Phillip Whisenhunt09 апр. 2012 г., 17:04
Я мог бы, но JavaScript не распознает & lt;% = :(. Спасибо.

На контроллере

@my_var = MyObj.find_by_id(4).to_json

На странице хамл способом.

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

JSON объект, который включен в большинство браузеров или если вы используете jQuery$.jsonParse метод, который пытаются использоватьJSON объект, если определено иначеeval или каким-то более безопасным способом.

Ваш ответ на вопрос