2011-07-21 93 views
17

json寶石不允許直接編碼字符串到他們的JSON表示。我試探性地移植這個PHP代碼:編碼一個Ruby字符串JSON字符串

$text = json_encode($string); 

這個紅寶石:

text = string.inspect 

,它似乎做的工作,但由於某些原因,如果string本身包含一個文本字符串(它實際上是JS代碼)用換行,這些新行\n將保持原樣\n,不被編碼爲\\n。我可以理解,如果這是#inspect正確的行爲,但...

怎樣一個編碼字符串值在Ruby中的JSON表示?

回答

7

隨着Ruby 2.1的,你可以

require 'json' 

'hello'.to_json 
3

有JSON的寶石紅寶石,一些純Ruby無數的一些基於C語言的獲得更好的性能。

這是一個既提供純Ruby和C: http://flori.github.com/json/

然後將其主要有:

require 'json' 
JSON.encode(something) 

與本地C綁定爲性能的一個流行的JSON編碼器/解碼器Yajl:從@Stewarthttps://github.com/brianmario/yajl-ruby

UPD: JSON.encode由導軌提供作爲我s object.to_json。對於rails以外的用途,使用JSON.generate,它在ruby 1.9.3 std-lib中。 - 斯圖爾特

+1

如前所述,'json'寶石__does不允許編碼字符串directly__。我會看看Yajl。 –

+0

對於JSON寶石兼容性yajl你可以做'需要「yajl/json_gem'' – mikeycgto

+10

值得一提的是這個答案假定問題海報使用Rails(然而,這並沒有在問題的規定)。 'JSON.encode'由rails提供,就像'object.to_json'一樣。對於rails之外的用法,使用ruby 1.9.3 std-lib中的'JSON.generate'。 – Stewart

19

這適用於股票1.9.3+標準庫JSON:

require 'json' 
JSON.generate('foo', quirks_mode: true) # => "\"foo\"" 

沒有quirks_mode: true,你得到的荒謬 「JSON :: GeneratorError:只允許代JSON對象或數組的」。