2015-09-24 4 views
6

私はJSONにハッシュオブジェクトをダンプする必要があり、私はこれら3つのどれか、to_jsonJSON.generateまたはJSON.dumpのどれかを使用することをお勧めします。JSONオブジェクトをダンプするのはどのような方法ですか? to_json、JSON.generateまたはJSON.dump?

私は、これらのメソッドの結果をテストしてみたし、彼らは同じです。

> {a: 1, b: 2}.to_json 
=> "{\"a\":1,\"b\":2}" 
> JSON.generate({a: 1, b: 2}) 
=> "{\"a\":1,\"b\":2}" 
> JSON.dump({a: 1, b: 2}) 
=> "{\"a\":1,\"b\":2}" 

答えて

4

から詳細情報を取得することができます

JSON.generateはオブジェクトのみまたは配列は、JSONの構文に変換することができます。 to_jsonは、しかし、それだけでシリアライズ

[JSON.dumps]マーシャルとYAMLのロード/ダンプ・インターフェースのインプリメンテーションの一部である

方法として作用するにもかかわらず、多くのRubyのクラスを受け付けます。

anIOIOのようなオブジェクトまたは書き込みメソッドに応答するオブジェクト)が指定された場合、結果のJSONが書き込まれます。

+0

オプションのファイル引数と制限の他に、 'generate'と' dumps'の間に大きな違いはまだありません。それですか? – linkyndy

+1

かなり。 Docsが言うように、 '#dump'は' serializer = [JSON、Marshal、YAML] [rand(3)]のようなことを可能にするためのものです。 serializer.dump(obj、io、limit) 'を実行します。 (例えば、設定ファイルでシリアライザを選択するともっと便利ですが、ランダムな選択よりも多くのスペースが必要です:P)。 – Amadan

3

JSON.generateはオブジェクトのみまたは配列は、JSONの構文に変換することができます。

to_jsonは、それが唯一のシリアル化

JSON.generate(1) 
JSON::GeneratorError: only generation of JSON objects or arrays allowed 

1.to_json 
=> "1" 

JSON.dumpための方法として機能していても、多くのRubyのクラスを受け入れ:JSON文字列としてOBJをダンプし、呼び出しがオブジェクトの上に生成し、その結果を返します。

あなたはdocsからhere

2

ダンプ配列、ハッシュ、およびオブジェクト(to_hashで変換)の場合、これらの3つの方法は同等です。

ただし、JSON.generateまたはJSON.dumpは、配列、ハッシュ、およびオブジェクトのみを許可します。

JSON.generate 1 # would be allowed 
1.to_json # => "1" 

JSON.generateは出力スタイルのためのより多くの選択肢を取った(スペースのように、インデント)

そしてJSON.dump:それは整数のように、唯一のシリアル化のための方法として機能していても

to_jsonは多くのRubyのクラスを受け入れますデフォルトのスタイルを出力しますが、writeの第2引数としてIOのようなオブジェクトをとり、ネストされた配列やオブジェクトの制限数として3番目の引数をとります。

関連する問題