我想解析YAML
foo: &foo
- a: 1
bar:
<<: *foo
当我尝试使用ruby的YAML时,我得到一个奇怪的结果:
YAML.load("
foo: &foo
- a: 1
bar:
<<: *foo
")
=> {"foo"=>[{"a"=>1}], "bar"=>{"<<"=>[{"a"=>1}]}}
注意奇数<<
的外观。我原以为
{"foo"=>[{"a"=>1}], "bar"=>[{"a"=>1}]}
我是否误解了如何使用YAML语法?
如果相关:
ENV['RBENV_VERSION']
=> "2.4"
YAML.libyaml_version
=> [0, 1, 4]
我对我的语法也有点怀疑,因为当我将其插入online yaml parser时,我会得到不同的输出,但也与我的期望不同:
{
"foo": [{"a": 1}],
"bar": {"a": 1}
}
(对不起,那个json - 但重点是bar
值没有像我期望的那样包在数组括号中。
答案 0 :(得分:1)
合并时似乎无法使用数组作为顶级键。
如果你创建一个新的rails应用程序,你可以在 config/database.yml
(这里是一个代码片段)
# config/database.yml
default: &default
adapter: postgresql
development:
<<: *default
在上面的示例中,它工作正常,但看到 default
键下方没有数组。
为了使代码工作正常,您应该将数组包装在另一个键中,如下所示:
# example.yml
foo: &foo
list:
- a: 1
bar:
<<: *foo
然后你会得到:
YAML.load_file('example.yml')
#=> {"foo"=>{"list"=>[{"a"=>1}]}, "bar"=>{"list"=>[{"a"=>1}]}}
正如您所看到的,主要问题是使用数组而不将它们包装到父键中。
答案 1 :(得分:0)
好的,我想我在这个问题中找到了答案:https://stackoverflow.com/a/4949139/239712。即,
...它没有定义合并的功能。根据{{3}},合并键可以具有值:
- 映射,在这种情况下,它会合并到父映射中。
- 映射序列,在这种情况下,每个映射都会逐个合并到父映射中。
没有办法合并序列。