我在Ruby on Rails中运行一个程序,并在YAML中设置了一组哈希。我得到一个ArgumentError显然是因为在同一行上有一个开口花括号,作为前一个哈希的右括号。
例如,我有:
features: [
{
name: lorem ipsum,
bullets: [
"bullet 1",
"bullet 2"
]
},{
name: lorem ipsum 2,
bullets: [
...
}
]
它给了我错误。但是,当我将开口花括号放在一个新的行上时:
},
{
name: lorem ipsum 2,
...
它工作正常。
我正在使用Ruby v.1.8.7,Rails v.3.2.1和Rails Config v.2.2.4读取YAML文件并在我的应用程序中访问它。
如何让YAML接受我的语法,而不采用后一种方法?
答案 0 :(得分:7)
YAML不使用大括号,括号等。相反,所有内容都将按原样解析为哈希值,您只需在列表项前面插入连字符:
features:
- name: lorem ipsum
bullets:
- bullet 1
- bullet 2
- name: lorem ipsum 2
bullets:
- ...
加载此内容即可:
{"features"=>[
{
"name"=>"lorem ipsum",
"bullets"=>["bullet 1", "bullet 2"]
},
{
"name"=>"lorem ipsum 2",
"bullets"=>["..."]
}
]}
答案 1 :(得分:3)
Ruby 1.8使用Syck库来解析yaml,它只实现了YAML规范的1.0版(并且还没有维护等)。
使用支持yaml规范1.1版的更新的YAML解析器(例如psych,可在ruby 1.9中使用),您的文件将解析。只是做
require 'psych'
require 'yaml'
确保您使用心理(检查YAML::ENGINE
的值)。虽然
答案 2 :(得分:2)
问题中的YAML不是惯用语,但实际上它几乎是合法的。 YAML在第8行中缺少的列表中的逗号后面需要一个空格。
更正了YAML:
features: [
{
name: lorem ipsum,
bullets: [
"bullet 1",
"bullet 2"
]
}, {
name: lorem ipsum 2,
bullets: []
}
]