Ответ 1
Эти escape-символы выходят "
в Ruby String
(ваш my_hash.to_json
вывод). Если вы делаете
puts my_hash.to_json
вы увидите, что на самом деле эти escape-символы не добавляются в строку вывода.
У меня есть хэш:
my_hash = {"[email protected]"=>{"first"=>"Bob", "last"=>"Johnson"}, "[email protected]"=>{"first"=>"Lisa", "last"=>"Dell"}}
Когда я пытаюсь сериализовать его с помощью my_hash.to_json
, это то, что я получаю:
"{\"[email protected]\":{\"first\":\"Bob\",\"last\":\"Johnson\"},\"[email protected]\":{\"first\":\"Lisa\",\"last\":\"Dell\"}}"
Как я могу преобразовать формат Hash в JSON без получения экранирующих символов?
Эти escape-символы выходят "
в Ruby String
(ваш my_hash.to_json
вывод). Если вы делаете
puts my_hash.to_json
вы увидите, что на самом деле эти escape-символы не добавляются в строку вывода.
to_json создает строку в двойных кавычках, а затем заполняет JSON двойными кавычками. Вот почему экранирующие символы представлены в первую очередь. Если вы должны были заменить внутренние двойные кавычки одинарными кавычками, необходимость в escape-символе теперь не нужна. Поэтому использование gsub с регулярным выражением для escape-символов является возможным решением:
my_hash.to_json.gsub(/[\"]/, "'")
=> "{'[email protected]':{'first':'Bob','last':'Johnson'},'[email protected]':{'first':'Lisa','last':'Dell'}}"
/[\"]/
= регулярное выражение, которое соответствует escape-символу и двойной кавычке, которую он экранирует как пара. Метод gsub заменяет оба символа во всех совпадающих экземплярах символом одинарной кавычки, предоставляя вам неэкранированную строку JSON.