2016-08-11 43 views
-1

我想弄清楚如何使用define_method(或任何其他方法)來生成數組名稱,因爲我的方法循環遍歷數組並將每個哈希元素轉換爲JSON。目前,我的數據是一系列剛剛轉儲到文件中的散列數組,不包含在任何更大的數組中。使用define_method在Ruby中生成動態數組名稱

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

我正在嘗試使用的代碼如下所示。基本上,我想每個哈希數組轉換成JSON和分配一個新的名稱,如json_array_1,jason_array_2等

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 

我知道這行:for (i = 0; i < data_array.length; i+=1) do是不是真的紅寶石還是不錯的代碼在所有。但我需要一種方法來循環遍歷循環,同時還可以將變量「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_0json_array_1 ... 讓它"json_array_#{i + 1}",如果你想從'json_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放在它自己的較大的數組中。但是,我正在處理一個以三個獨立散列數組生成的文件,兩者之間沒有逗號。當我嘗試將哈希數組推入更大的數組時,我總是不斷地以字符串結尾。我不確定爲什麼會發生這種情況,儘管我同意如果data_arrays已經包含在一個更大的數組中,它會容易得多。 –

+0

我不明白。你是說這些是文件中的文本字符串?如果是這樣,請編輯您的答案以便說出來,並將字符串放在引號中。另外,將'data_arrays'設置爲不是Ruby對象的東西是沒有意義的。 –