YAML语法报错:能否在YAML中分别定义对象与列表?
YAML报错原因及解决方案
你遇到的两个错误,核心原因是YAML的根节点只能是单个结构——要么是完整的映射(键值对/对象),要么是完整的序列(列表),不能在根层级同时混放映射条目和列表条目。
你的代码里,根节点先是app:、port:这类映射键值对,后面又直接写了- one这种列表项,YAML解析器会把前面的映射键当作“隐式键”,但后面的列表项无法作为这些键对应的值,所以触发了"Implicit keys need to be on a single line"和"Implicit map keys need to be followed by map value"错误。
当然可以在YAML里同时定义对象和列表,只要调整结构让它们符合YAML的根规则,给你两种可行的调整方式:
方式一:把列表作为根映射的一个键值对
把列表放到某个键下面,让整个文件的根是一个完整的映射:
# This is a comment # These are key-value pairs app: user-auth port: 22 version: 1.1 # This is an object microservices: app: user-auth port: 22 version: 1.1 # This is a list (归属到根映射的items键下) items: - one - two - three
方式二:用文档分隔符拆分多个独立文档
如果想让映射和列表完全独立,可以用---作为文档分隔符,把文件拆成多个独立的YAML文档,每个文档可以是单独的映射或列表:
# 第一个文档:包含键值对和对象的映射 --- # These are key-value pairs app: user-auth port: 22 version: 1.1 # This is an object microservices: app: user-auth port: 22 version: 1.1 # 第二个文档:独立的列表 --- - one - two - three
至于单独保留列表时不报错,是因为此时整个文件的根节点就是一个合法的序列结构,完全符合YAML的解析规则,所以不会触发错误。
内容的提问来源于stack exchange,提问作者Stephanie Hernandez
相关产品推荐
相关产品推荐

