2011-07-21 18 views
17

json gemでは文字列をJSON表現に直接エンコードすることはできません。このルビーへRuby文字列をJSON文字列にエンコード

$text = json_encode($string); 

:私は暫定的に、このPHPコードの移植

text = string.inspect 

をし、仕事をするように見えたが、何らかの理由でstring自体がリテラル文字列が含まれている場合(それが実際だJSコード)改行で、これらの改行\nはそのまま\nのままで、\\nにはエンコードされません。これが#inspectの正しい動作であるかどうかはわかりますが、

RubyでJSON表現に文字列値をエンコードするにはどうすればよいですか?

答えて

7

述べたように、あなたは

require 'json' 

'hello'.to_json 
3

Rubyには数多くのJSONの宝石があります。純粋なRubyの中には、パフォーマンス向上のためにCベースのものもあります。ここで

は純粋なRubyとCの両方を提供していますいずれかになります。 http://flori.github.com/json/

そしてその本質的:

require 'json' 
JSON.encode(something) 

パフォーマンスのためのネイティブC-バインディングに人気のJSONエンコーダ/デコーダはYajlです。 @Stewartからhttps://github.com/brianmario/yajl-ruby

UPD: JSON.encodeは、iとレールによって提供されs object.to_json。レール外で使用する場合は、ruby 1.9.3 std-libにあるJSON.generateを使用してください。 - スチュワート

+1

をすることができ、 'json'逸品文字列directly__をコードすることはできませ__does。私はYajlを見てみましょう。 –

+0

yajlのJSON gemの互換性については、 'require 'yajl/json_gem''を実行することができます – mikeycgto

+10

この回答は、質問のポスターがレールを使用していることを前提としています(ただしこれは質問では規定されていません)。 'JSON.encode'は、' object.to_json'と同様に、レールによって提供されます。レールの外で使うには、Ruby 1.9.3 std-libにある 'JSON.generate'を使います。 – Stewart

19

これは株式1.9.3+標準ライブラリJSONで動作します。quirks_mode: trueなければ

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

、あなたはとんでもない ":許可されるJSONオブジェクトや配列の生成のみJSON :: GeneratorError" を取得します。ルビー2.1のよう