Чтобы представить новую строку в данных JSON с помощью двойных кавычек, вы должны экранировать новую строку:
ActiveSupport::JSON.decode("{\"content\": \"active\\n\\nsupport\"}")
В противном случае вы вставляете новую строку в источник JSON , а не в JSON данные .Обратите внимание, что это также будет работать:
ActiveSupport::JSON.decode('{"content": "active\n\nsupport"}')
Используя одинарные кавычки, вы больше не вставляете буквальный символ новой строки в источник JSON.
ЭтоИнтересно отметить, как ActiveSupport обрабатывает это по умолчанию (бэкэнд по умолчанию JSON ActiveSupport::JSON::Backends::Yaml
).Установив гем json
и изменив на него бэкэнд JSON (ActiveSupport::JSON.backend = 'JSONGem'
) и попытавшись декодировать тот же текст (ActiveSupport::JSON.decode("{\"content\": \"active\\n\\nsupport\"}")
), вы получите следующее:
JSON::ParserError: 737: unexpected token at '{"content": "active
support"}'