yaml格式的字符串文字@的格式是什么?

时间:2012-11-17 00:02:21

标签: ruby yaml

我有一个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中使用@的字符串文字?

2 个答案:

答案 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"
}