我有一个 twitter 用户的哈希表。
tweeter1: @jack
tweeter2: @jill
tweeter3: @john
但是因为@
,我不能YAML.load
存档。
它抛出的错误是Psych::SyntaxError: (<unknown>): did not find expected node content while parsing a flow node at line 1 column 11
你如何@
在 YAML 中使用字符串文字?
只需双引号您的价值观:
tweeter1: "@jack"
tweeter2: "@jill"
tweeter3: "@john"
那么你在阅读时应该会得到预期的 Hash:
{
"tweeter1" => "@jack",
"tweeter2" => "@jill",
"tweeter3" => "@john"
}
您可以随时访问yaml.org了解有关 YAML 格式的详细信息。
你不YAML.load
归档,你使用YAML.load_file
.
否则,如果字符串显然不是整数,通常我们可以使用裸值,但是您可以通过将其嵌入双引号中来强制它为字符串:
tweeter1: "@jack"
tweeter2: "@jill"
tweeter3: "@john"
当我处理 YAML 格式问题时,我会先在 Ruby 中创建结构,然后让 YAML 为我创建它,然后将其用作模型:
require 'yaml'
asdf = {
'foo' => '@foo'
}
puts asdf.to_yaml
输出:
---
foo: ! '@foo'
然后,我会做一个往返测试,如果我把我输入的东西拿出来,我会很高兴:
pp YAML.load(asdf.to_yaml)
{"foo"=>"@foo"}
{
"foo" => "@foo"
}
请注意"@foo"
,尽管 YAML 正在使用! '@foo'
,但它仍然有效,但这不是必需的:
asdf = '
---
foo: "@foo"
'
YAML.load(asdf)
{
"foo" => "@foo"
}