форматирование объекта JSON в рельсах 3 - PullRequest
1 голос
/ 27 апреля 2011

У меня в приложении rails есть API для клиентов iPhone и Android. Я делаю Message.find (1) .to_json (: include =>: user), но это добавляет \ around ", чтобы избежать этого.

Как я могу предотвратить выход to_json из двойных кавычек?

>> { "a" => "blah" }.to_json
=> "{\"a\":\"blah\"}"

Я бы хотел, чтобы это было { "a" : "blah" } или { a : "blah" }

1 Ответ

2 голосов
/ 27 апреля 2011

Похоже, это действительно то, что вы хотите.

То, что вы видите, это строка, отформатированная для отображения (и читаемости человеком).Он ограничен двойными кавычками, поэтому двойные кавычки внутри строки экранируются.В действительности строка содержит двойные кавычки, но для буквального представления они экранированы.Если вы вставите это в анализатор JSON, вы обнаружите, что он возвращает нужный вам объект.

Если вы распечатаете это, вы обнаружите, что получите нужный формат.

irb(main):001:0> puts { "a" => "blah" }.to_json
{"a":"blah"}
=> nil

Для дальнейшей иллюстрации, вы можете попробовать разобрать его.Строка, с которой вы пришли, возвращает ваш исходный объект, потому что JSON представлен строкой.Однако попытка вставить желаемый контент приведет к неприятной синтаксической ошибке или к ошибке TypeError.Это потому, что JSON не является литералом в Ruby, тогда как в JavaScript его можно использовать как литеральный объект.В Ruby это представление в виде строки.

irb(main):002:0> JSON.parse("{\"a\":\"blah\"}")
=> {"a"=>"blah"}

irb(main):003:0> JSON.parse({ "a" : "blah" })
SyntaxError: (irb):3: syntax error, unexpected ':', expecting tASSOC
JSON.parse({ "a" : "blah" })
                  ^
(irb):3: syntax error, unexpected '}', expecting $end
JSON.parse({ "a" : "blah" })
                       ^
irb(main):004:0> JSON.parse({a:"blah"})
TypeError: can't convert Hash into String
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...