我正在尝试弄清楚如何使用define_method(或任何其他方法)生成数组名称,因为我的方法循环遍历数组并将每个哈希元素转换为JSON。现在,我的数据是一系列哈希数组,只是转储到一个文件中,不包含在任何更大的数组中。
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
根本不是Ruby或良好的代码。但我需要一种迭代循环的方法,同时也可以将变量“i”插入到json_array名称中。任何人都可以给我任何指针让这个代码工作?我可能会过度思考事情并使其变得比实际更难。
答案 0 :(得分:1)
data_arrays.each_with_index do |element, i|
define_method("json_array_#{i}") do
element.to_json
end
end
这将定义方法json_array_0
,json_array_1
...
如果你想从`json_array_1。
"json_array_#{i + 1}"
答案 1 :(得分: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.