将列表包装在多行yaml上

时间:2015-08-05 18:02:27

标签: yaml

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

my_string: this is my very very very very very reeeeeeeally quite long string

相当于:

my_string:> 
       this is my very very very very
       very reeeeeeeally quite long string

是否可以对列表执行相同的操作?类似的东西:

[my, very, long, list, that, is, waaaaaaaaaaaaaaay, tooooo, long]

写作:

my_list:>
     [my, very, long, 
     list, that, is, 
     waaaaaaaaaaaaaaay, tooooo, long]

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

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

2 个答案:

答案 0 :(得分:3)

你所拥有的是"Flow sequence"并且没有要求将它放在一行上。但是你确实希望保持相对于它所属的(映射)键的缩进(尽管一些解析器放宽了这个要求):

my_list: [my, very, long, 
         list, that, is, 
         waaaaaaaaaaaaaaay, tooooo, long]

或者您可以决定使用block style sequence,但由于每个序列元素 都在其自己的行上,因此灵活性较低:

my_list:
- my
- very
- long
- list
- that
- is
- waaaaaaaaaaaaaaay
- tooooo
- long

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

您收到错误mapping values are not allowed here的可能性很大,因为您确实在

之后放了一个键值映射
my_list:>
     [my, very, long, 
     list, that, is, 
     waaaaaaaaaaaaaaay, tooooo, long]
xyz: 123

您通过online parsers获得上述错误。原因在于,因为冒号后面没有空格,my_list永远不是映射的关键,而是多行标量(字符串)的开头,嵌入的换行符转换为间隔,{{3 }}。它基本上等同于写作:

"my_list:> [my, very, long, list, that, is, waaaaaaaaaaaaaaay, tooooo, long]"

因为缺少冒号后的空格。

答案 1 :(得分:0)

刚想通了,YAML还有另一个列表语法:

my_list:
    - this
    - is
    - my 
    - reaaaaally
    - long 
    - list

这允许我包装列表