将列表包装在多行 yaml 上

Gra*_*oth 5 yaml

在 YAML 中,我知道可以将一个字符串包装在多行上,如下所示:

my_string: this is my very very very very very reeeeeeeally quite long string
Run Code Online (Sandbox Code Playgroud)

相当于:

my_string:> 
       this is my very very very very
       very reeeeeeeally quite long string
Run Code Online (Sandbox Code Playgroud)

是否可以用列表做同样的事情?就像是:

[my, very, long, list, that, is, waaaaaaaaaaaaaaay, tooooo, long]
Run Code Online (Sandbox Code Playgroud)

写成:

my_list:>
     [my, very, long, 
     list, that, is, 
     waaaaaaaaaaaaaaay, tooooo, long]
Run Code Online (Sandbox Code Playgroud)

但是分成多行,文档没有具体说明。当我在加载 YAML 文件时尝试以上述方式执行此操作时,出现错误:

yaml.scanner.ScannerError: mapping values are not allowed here
Run Code Online (Sandbox Code Playgroud)

Ant*_*hon 8

您拥有的是一个“流程序列”,并且不需要将其放在一条线上。但是,您确实希望相对于它所属的(映射)键保持缩进(尽管一些解析器放宽了此要求):

my_list: [my, very, long, 
         list, that, is, 
         waaaaaaaaaaaaaaay, tooooo, long]
Run Code Online (Sandbox Code Playgroud)

或者,您可以决定使用块样式 sequence,但这不太灵活,因为每个序列元素必须在自己的行上:

my_list:
- my
- very
- long
- list
- that
- is
- waaaaaaaaaaaaaaay
- tooooo
- long
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以但不必-在列表元素前相对于映射键 ( my_list)缩进短划线( )

您收到错误mapping values are not allowed here很可能是因为您确实在

my_list:>
     [my, very, long, 
     list, that, is, 
     waaaaaaaaaaaaaaay, tooooo, long]
xyz: 123
Run Code Online (Sandbox Code Playgroud)

您在使用在线解析器时会遇到上述错误。原因是,因为冒号后面没有空格,my_list永远不是映射的键,而是多行标量(字符串)的开头,嵌入的换行符转换为空格,long]. 它本质上相当于写:

"my_list:> [my, very, long, list, that, is, waaaaaaaaaaaaaaay, tooooo, long]"
Run Code Online (Sandbox Code Playgroud)

因为缺少冒号后的空格。