0

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

4

2 回答 2

4

只需双引号您的价值观:

tweeter1: "@jack"
tweeter2: "@jill"
tweeter3: "@john"

那么你在阅读时应该会得到预期的 Hash:

{
    "tweeter1" => "@jack",
    "tweeter2" => "@jill",
    "tweeter3" => "@john"
}

您可以随时访问yaml.org了解有关 YAML 格式的详细信息。

于 2012-11-17T00:12:37.883 回答
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"
}
于 2012-11-17T00:12:52.320 回答