我有一個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