我有一个rails应用程序为iphone/android客户端提供api。我在做Message.find(1).to_json(:包括=>:用户)。?但是,增加了\围绕“逃吧在rails 3中格式化JSON对象
如何防止to_json逃逸双引号
>> { "a" => "blah" }.to_json
=> "{\"a\":\"blah\"}"
我想它是{ "a" : "blah" }
或{ a : "blah" }
我有一个rails应用程序为iphone/android客户端提供api。我在做Message.find(1).to_json(:包括=>:用户)。?但是,增加了\围绕“逃吧在rails 3中格式化JSON对象
如何防止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
有关详细说明,请尝试解析它。您结束的字符串会返回您的原始对象,因为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
这是逃避的东西,你为什么要删除它? – fl00r 2011-04-26 20:22:00
json在iOS端解析失败,因为它有\引号。有了这个应用程序,将永远不会有任何报价。 – ed1t 2011-04-26 20:36:15