2013-05-01 29 views
-1

在軌控制檯,如果我輸入:如何在ruby中返回JSON?

User.all.to_json 

我碰到下面的返回。

"[{\"created_at\":\"2013-04-29T23:10:36Z\",\"email\":\"[email protected]\",\"id\":2,\"updated_at\":\"2013-04-29T23:10:36Z\"},{\"created_at\":\"2013-03-18T04:53:42Z\",\"email\":\"[email protected]\",\"id\":1,\"updated_at\":\"2013-05-01T12:03:01Z\"}]" 

當複製/粘貼代碼到http://jsonviewer.stack.hu/並試圖把它當作JSON,我得到一個錯誤說「無效的JSON變量」。我相信這是因爲'\'字符。有關如何解決這個問題的任何建議?

+0

什麼是'User.all'沒有'to_json'? – 2013-05-01 18:43:14

+1

如果你這樣做,在您的控制檯,這是「正常」的輸出包含幾個引號和反斜線,嘗試'把User.all.to_json'在控制檯。 – MrYoshiji 2013-05-01 18:44:37

+0

@MrYoshiji你想要寫一個答案,我會接受嗎? – sharataka 2013-05-01 18:57:36

回答

0

如果你這樣做,在您的控制檯,這是「正常」的輸出包含幾個引號和反斜線。

在我的IRB控制檯:

irb(main):009:0> Patient.first.to_json 
#=> "{\"patient\":{\"created_at\":\"2013-03-14T16:53:52-04:00\",\"id\":6538,\"updated_at\":\"2013-03-14T16:53:52-04:00\"}}" 

但如果使用方法puts

irb(main):010:0> puts Patient.first.to_json 
{"patient":{"created_at":"2013-03-14T16:53:52-04:00","id":6538,"updated_at":"2013-03-14T16:53:52-04:00"}} 
#=> nil 
2
  • to_json返回一個JSON字符串與轉義引號等
  • as_json回到它作爲實際的JSON,這是什麼會正確地驗證。

使用哪種取決於你如何渲染它。

+0

我嘗試使用as_json,但現在它有'=>',我仍然得到相同的錯誤,說它不是一個有效的JSON變量。 – sharataka 2013-05-01 18:56:20

+0

@sharataka正如我所說的,這取決於你如何渲染它。 to_json很好,如果你使用'puts'或者把它作爲字符串發送給瀏覽器。如果你使用普通的Rails JSON渲染,你可以使用'as_json'。 – 2013-05-01 18:58:20