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 是否是最佳解决方案。
这是有效的 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 是否是最佳解决方案。