PyYAML 无法解析序列序列

PyYAML can't parse sequence of sequences

这是有效的 YAML:

jobs:
  - type: Agricultural

这不是有效的 YAML:

jobs:
  - type: Agricultural
    - title: Farmer

为什么不呢?在 PyYAML 中,这会产生:

yaml.parser.ParserError: while parsing a block mapping
  in "jobs.yaml", line 2, column 5
expected <block end>, but found '-'
  in "jobs.yaml", line 3, column 5

一个有效且符合您要求的示例:

--- 
jobs: 
  - type: agricultural
    titles: 
      - Farmer
      - Picker
      - Combine Operator
   - type: manufacturing
     titles:
       - assembler
       - shipper
       - shop forman

这无效的原因是因为您正在尝试拥有一个由映射和序列组成的节点,而这在 YAML 中是不允许的,其中节点可以是这些组合之一,也可以是原语。

万一映射只有键值对(type,Agricultural),序列包含映射(带键title)

有多种方法可以将其更改为有效的 YAML,这里有一些:

  • 您可以省略 type 键并使用 agricultural 作为嵌套列表的键:

    jobs:
      - Agricultural:
        - title: Farmer
    
  • 您可能不需要嵌套序列:

    jobs:
      - Agricultural:
        title: Farmer
    
  • 你可以使用标签,它允许你直接加载正确的底层 class 而不是自己检查字符串 Agricultural:

    jobs:
      - @Agricultural
        title: Farmer
    

后者需要适当的 class 注册,但如果您有多个作业(子)类型,IMO 是否是最佳解决方案。