Похоже, вы не понимаете фактическое содержание строки. Обратная косая черта является частью строкового представления и на самом деле отсутствует в строке.
Например, '"'
один символ "
. Когда вы введете это значение в irb, вы получите:
s = '"'
#=> "\""
Из результата "\""
начальный "
и конечный "
помечают начало и конец строки, в то время как \"
является избежал двойной кавычки и представляет собой одиночный "
. Причина, по которой двойные кавычки экранированы, заключается в том, что вы хотите, чтобы Ruby интерпретировал его как символ "
, а не как конец строки.
Вы можете просматривать фактическое содержимое строки без escape-символов распечатав его на консоль.
puts s
# "
#=> nil
Здесь вы можете увидеть, что в содержимом строки нет обратного знака sh.
То же самое относится к вашему to_json
вызов, который возвращает строку:
data = {"a" => "b", "c" => "d", "e" => "f"}
json = data.to_json
#=> "{\"a\":\"b\",\"c\":\"d\",\"e\":\"f\"}"
puts json
# {"a":"b","c":"d","e":"f"}
#=> nil
Как вы видите, в содержимом строки нет обратной косой черты, только в строковом представлении.