我刚刚开始学习YAML,而我并没有真正找到一些我想要完成的最佳实践。基本上,我的YAML文件中有一个对象数组,为了生产,我想再添加一个这个数组的条目。所以我基本上想要这样的东西(它是伪代码,因为我知道它不是有效的YAML):
development:
array: &ARRAY
- name: item1
value: value1
- name: item2
value: value2
production:
<<: *ARRAY
array:
- name: item3
value: value3
目前,我正在用Ruby解析我的YAML文件,所以我决定在Ruby中处理这个逻辑。我正在做这样的事情:
yaml_contents = YAML::load(yaml_string)
prod_values = yaml_contents['production']
prod_values['array'].push({:name => 'item3', :value => 'value3'})
然而,这可能会使我的加载脚本非常毛茸茸。有没有更好的设计方法?
我相信this question是相关的。
答案 0 :(得分:1)
<<
语法用于合并地图(即哈希),而不是序列。你可以这样做:
development: &ARRAY
- name: item1
value: value1
- name: item2
value: value2
production:
- *ARRAY
- name: item3
value: value3
加载时,production
数组将有一个嵌套数组,因此您需要使用flatten
:
yaml_contents = YAML::load(yaml_string)
prod_values = yaml_contents['production'].flatten
如果您的实际数据可能涉及嵌套哈希,并且您只想展平在Yaml中显示为别名的任何数组,您可以编写自己的Psych访客(可能是Psych::Visitors::ToRuby
的子类)并将它们合并为你创建了对象图,但我怀疑在这种情况下简单地调用flatten
就足够了。