Ruby on rails 在Rails3中格式化JSON对象

Ruby on rails 在Rails3中格式化JSON对象,ruby-on-rails,web-services,json,Ruby On Rails,Web Services,Json,我有一个rails应用程序,它有一个用于iphone/android客户端的api。我正在执行Message.find(1).to_json(:include=>:user),但这会添加\around“来转义它 如何防止to_json转义双引号 >> { "a" => "blah" }.to_json => "{\"a\":\"blah\"}" 我希望它是{a:“blah”}或{a:“blah”}看起来这就是你想要的 您看到的是为显示而格式化的字符串(以及人类可读性)。

我有一个rails应用程序,它有一个用于iphone/android客户端的api。我正在执行Message.find(1).to_json(:include=>:user),但这会添加\around“来转义它

如何防止to_json转义双引号

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

我希望它是
{a:“blah”}
{a:“blah”}

看起来这就是你想要的

您看到的是为显示而格式化的字符串(以及人类可读性)。它由双引号分隔,因此字符串中的双引号将被转义。实际上,字符串包含双引号,但对于文字表示,它们将被转义。如果将其粘贴到JSON解析器中,您将发现它将返回所需的对象

irb(main):001:0> puts { "a" => "blah" }.to_json
{"a":"blah"}
=> nil
如果你把它打印出来,你会发现你得到了你想要的格式

irb(main):001:0> puts { "a" => "blah" }.to_json
{"a":"blah"}
=> nil
为了进一步说明,您可以尝试对其进行解析。您最后使用的字符串返回原始对象,因为JSON由字符串表示。但是,尝试插入所需内容将导致严重的语法错误或类型错误。这是因为JSON在Ruby中不是文字,而在JavaScript中可以用作l在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

这是转义内容,为什么要删除它?iOS端的json解析失败,因为它有\around引号。使用此应用程序,将永远不会有任何引号。在irb中,您可以通过调用结果上的puts(即puts{“a”=>“blah”}toU json)来查看未带引号的未转义字符串.Ah,duh。我会编辑以避免迂回的方式。我今天的想法在哪里。我使用as_json而不是to_json,这似乎有效,但我不确定两者之间的区别是什么,因为as_json用于生成要编码到json中的哈希结构。是否可能您正在这样做:render:json=>@bla.to_json。如果是这样,您可能已经被说服了将已经是json的字符串插入json,从而双重转义它?