我可以操作yaml文件并再次写出来

时间:2014-09-25 16:01:48

标签: ruby yaml

我有一个值映射,键是文件名,值是数组字符串。 我有相应的文件

如何加载文件并创建一个固定的yaml值,该值包含数组的值,无论该值是否已存在

e.g。

YAML(file.yaml)

trg::azimuth:
-extra
-intra
-lateral

trg::azimuth: 
  [extra,intra,lateral]

来自

RUBY

{"file.yaml" => ["extra","intra","lateral"]}

1 个答案:

答案 0 :(得分:1)

YAML documentation并没有很好地涵盖其方法,但确实说

  

底层实现是libyaml包装器Psych。

作为YAML基础的Psych documentation涵盖阅读,解析和发出YAML。

以下是基本流程:

require 'yaml'

foo = {"file.yaml" => ["extra","intra","lateral"]}
bar = foo.to_yaml
# => "---\nfile.yaml:\n- extra\n- intra\n- lateral\n"

以下是生成的,序列化的bar变量在编写时的样子:

puts bar
# >> ---
# >> file.yaml:
# >> - extra
# >> - intra
# >> - lateral

这是YAML解析器所需的格式:

baz = YAML.load(bar)
baz
# => {"file.yaml"=>["extra", "intra", "lateral"]}

此时哈希已经从Ruby哈希转移到YAML序列化字符串,再回到Ruby哈希。

使用Ruby的File.write方法将YAML写入文件很容易:

File.write(foo.keys.first, foo.values.first.to_yaml)

foo.each do |k, v| 
  File.write(k, v.to_yaml)
end

这导致名为“file.yaml”的文件,其中包含:

---
- extra
- intra
- lateral

要阅读和解析文件,请使用YAML的load_file方法。

foo = YAML.load_file('file.yaml')
# => ["extra", "intra", "lateral"]

How do I parse a YAML file?”可能会有用,以及本页右侧的其他“相关”链接。