如何手动编写yaml文件

时间:2015-10-05 17:38:40

标签: syntax yaml

我正在尝试写一个YAML文件,但它对我来说很新,我无法弄清楚嵌套部分。

是否可以像这样写一个文件?

Manager : me@here.com
    custid : 380
    employees :
        - Wright
        - Thompson
        - Hope

Manager: me2@here.com
    custid : 381
    employees :
       - Smith
       - Jones

每次我写这篇文章时,我都会遇到错误,

yaml.scanner.ScannerError: mapping values are not allowed here

这发生在custid部分之后。为什么会这样?

2 个答案:

答案 0 :(得分:0)

Yaml只识别空格,所以如果你使用Tab进行缩进,那么这就是造成问题的原因。 Here是帮助您入门的官方文档。

答案 1 :(得分:0)

问题在于Manager :。对于第一个,您使用键Manager和标量值me@here.com开始映射,然后在下一行中继续使用更多两个键值对缩进。由于你的缩进,解析器不知道在哪里附加这些。

您可能想要这样做:

- Manager : me@here.com
  custid : 380
  employees :
        - Wright
        - Thompson
        - Hope

- Manager: me2@here.com
  custid : 381
  employees :
       - Smith
       - Jones

即。两个管理器的列表,每个管理器由一个映射组成,带有三个键(Manager,custid,employees)。

您还可以隐藏经理职位,将电子邮件设为密钥:

me@here.com:
  custid : 380
  employees :
        - Wright
        - Thompson
        - Hope

me2@here.com:
  custid : 381
  employees :
       - Smith
       - Jones

但在这种情况下,电子邮件必须是唯一的。

您还可以在顶层使用更复杂的键(因此只要角色不同,您就可以拥有相同的电子邮件)¹:

[Manager, me@here.com]:
  custid : 380
  employees :
        - Wright
        - Thompson
        - Hope

[Manager, me2@here.com]:
  custid : 381
  employees :
       - Smith
       - Jones

但一般规则是,如果您没有为每条记录设置一些唯一标识密钥,则需要使用列表。

¹这个表单是PyYAML不支持AFAIK的键,但我的ruamel.yaml解析器可以处理这些(有效)YAML键