我有一个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中使用@
的字符串文字?
答案 0 :(得分:4)
只需双引号值:
tweeter1: "@jack"
tweeter2: "@jill"
tweeter3: "@john"
然后,当你阅读它时,你应该得到预期的哈希:
{
"tweeter1" => "@jack",
"tweeter2" => "@jill",
"tweeter3" => "@john"
}
您可以随时前往yaml.org了解有关YAML格式的详细信息。
答案 1 :(得分:2)
您没有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"
}