2016-08-11 7 views
-1

私のメソッドが配列をループして各ハッシュ要素をJSONに変換するときに、define_method(または他の方法)を使って配列名を生成する方法を解明しようとしています。現在、私のデータはファイルにダンプされた一連のハッシュ配列であり、大きな配列には含まれていません。define_methodを使ってRubyで動的配列名を生成する

data_arrays = [{"key1":"value1"}, {"key2":"value2"}] 
     [{"key3":"value3"}, ("key4":"value4")] 
     [{"key5":"value5"}, ("key6":"value6")] 

私が扱おうとしていたコードは、次のようなものです。基本的に、私はこのラインを意識してい

data_arrays.each do |element| 
    for (i = 0; i < data_array.length; i+=1) do 
     define_method("json_array_#{i}") do 
      json_array_[i] = element.to_json 
     end 
    end 
end 

など、json_array_1のような、jason_array_2、各ハッシュ配列をJSONに変換すると、新しい名前を割り当てることがしたい: for (i = 0; i < data_array.length; i+=1) doが本当にRubyや、全く良いコードではありません。しかし、ループを反復する方法が必要でしたが、変数 "i"をjson_arrayの名前に挿入できるようにしました。誰も私にこのコードを動作させるためのポインタを教えてもらえますか?私はおそらく物事を思慮深く考え、実際よりももっと難しくしています。

+0

あなたは問題をはっきりと示しておらず、私は小さな事柄しか手助けできません。 (1)配列インデックスを取得するには 'data_arrays.each_with_index do | element、i | ' (2)メソッドを動的に呼び出すには' send( "json_array _#{i} ="、element.to_json) ' –

+0

'data_arrays'のいくつかのエラーがあります。私の答えでどのように定義したかを見てください。 –

答えて

1
data_arrays.each_with_index do |element, i| 
    define_method("json_array_#{i}") do 
    element.to_json 
    end 
end 

これは、あなたがjson_array_1 `から起動したい場合は、それ"json_array_#{i + 1}"作る方法json_array_0json_array_1 ... を定義します。

+0

アドバイスをいただきありがとうございます。しかし、これは私にとってはまったく機能していないようです。実際には何も実行されません。 –

0
data_arrays = [[{key1:"value1"}, {key2:"value2"}], 
       [{key3:"value3"}, {key4:"value4"}], 
       [{key5:"value5"}, {key6:"value6"}]] 
require 'json' 

json_strings = data_arrays.map { |a| a.map { |h| h.to_json } } 
    #=> [["{\"key1\":\"value1\"}", "{\"key2\":\"value2\"}"], 
    # ["{\"key3\":\"value3\"}", "{\"key4\":\"value4\"}"], 
    # ["{\"key5\":\"value5\"}", "{\"key6\":\"value6\"}"]] 

or 

json_strings = data_arrays.flat_map { |a| a.map { |h| h.to_json } } 
    #=> ["{\"key1\":\"value1\"}", "{\"key2\":\"value2\"}", "{\"key3\":\"value3\"}", 
    # "{\"key4\":\"value4\"}", "{\"key5\":\"value5\"}", "{\"key6\":\"value6\"}"] 

depending on your needs. 
+0

data_arraysをそれ自身の大きな配列の中に配置することがわかりました。しかし、私は3つの別々のハッシュ配列として生成されたファイルを使用しています。その間にカンマはありません。私がハッシュ配列をより大きな配列にプッシュしようとすると、私は常に文字列で終わってしまいます。 data_arraysがすでに大きな配列に含まれていた方がずっと簡単だと私は同意しますが、なぜこれが起こっているのかは分かりません。 –

+0

私は分かりません。あなたはそれらがファイル内のテキスト文字列であると言っていますか?もしそうなら、回答を編集して、文字列を引用符で囲みます。また、 'data_arrays'をRubyオブジェクトでないものに設定するのは意味がありません。 –

関連する問題