【发布时间】:2016-01-25 15:09:59
【问题描述】:
由于一些黑暗的原因,我必须将一个特定的格式化数组转换为哈希,一个解决方案是通过 YAML。
我没有在不创建文件的情况下通过 yaml 将数组转换为哈希,您能帮帮我吗?
我的原始数组可能是这样的:
[
["lvl1"],
[nil,"lvl2"],
[nil, nil, "lvl3", "value1", "value2", "value3"],
[nil, "lvl2bis"],
[nil, nil, "lvl3bis", "value1bis", "value2bis", "value3bis"]
]
我把这个数组转换成字符串:
-
对于一个字符串
yml_text = [] array.each do |line| yml_line = line.join(",").gsub(/\G,/, ' ').sub(/,+\z/, ']').sub(/:,+/, ': [') yml_text << yml_line end yml_text = yml_text.join("\n") -
对于一个文件
f = File.open(yml_file_path, "w") array.each do |line| yml_line = line.join(",").gsub(/\G,/, ' ').sub(/,+\z/, ']').sub(/:,+/, ': [') f.puts(yml_line) end f.close
我得到了以下结果:
lvl1:
lvl2:
lvl3: ["value1", "value2", "value3"]
lvl2bis:
lvl3bis: ["value1", "value2", "value3"]
如果我将此文本保存在 yml 文件中并像这样解析它:
hash = YAML.load(File.read(yml_file_path))
我得到了我的哈希:
{ "lvl1" => {
"lvl2" => {
"lvl3" => ["value1", "value2", "value3"]
},
"lvl2bis" => {
"lvl3bis" => ["value1bis", "value2bis", "value3bis"]
}
}
}
如果我不将此文本保存为 yml 文件并尝试加载我的 yml_text,我会得到:
yml_data = YAML.load(yml_text)
p yml_data
"lvl1 lvl2 lvl3,value1,value2,value3 lvl2bis lvl3bis,value1bis,value2bis,value3bis"
不创建文件就不能通过 YAML 吗?
【问题讨论】:
-
我猜你忘了运行
yml_text = yml_text.join("\n"),你能告诉我们YAML.load(yml_text)之前yml_text的值吗
标签: ruby-on-rails ruby yaml