将列表包装到多行yaml上
在YAML中,我知道可以将字符串包装在多行上,如下所示:将列表包装到多行yaml上,yaml,Yaml,在YAML中,我知道可以将字符串包装在多行上,如下所示: my_string: this is my very very very very very reeeeeeeally quite long string my_list: - this - is - my - reaaaaally - long - list 相当于: my_string:> this is my very very very very
my_string: this is my very very very very very reeeeeeeally quite long string
my_list:
- this
- is
- my
- reaaaaally
- long
- list
相当于:
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
刚刚发现,YAML还有另一种列表语法,如下所示:
my_string: this is my very very very very very reeeeeeeally quite long string
my_list:
- this
- is
- my
- reaaaaally
- long
- list
这允许我包装一个列表您拥有的是一个列表,不需要将它放在一行中。但是,您确实希望相对于它所属的(映射)键保持缩进(尽管有些解析器放宽了这一要求):
或者,您可以决定使用,但由于每个序列元素都有自己的行,因此灵活性较低:
my_list:
- my
- very
- long
- list
- that
- is
- waaaaaaaaaaaaaaay
- tooooo
- long
在这种情况下,您可以但不必在列表元素之前相对于映射键缩进破折号(-
)
您得到错误此处不允许映射值
,很可能是因为您在
my_list:>
[my, very, long,
list, that, is,
waaaaaaaaaaaaaaay, tooooo, long]
xyz: 123
你在上面得到了这个错误。原因是,因为冒号后面没有空格,my_list
从来都不是映射的关键,而是多行标量(字符串)的开头,其中嵌入的换行符转换为空格。它本质上等同于写作:
"my_list:> [my, very, long, list, that, is, waaaaaaaaaaaaaaay, tooooo, long]"
因为冒号后面的空格丢失。第二个和最后一个示例都是带有嵌入换行符的单字符串标量(请尝试将它们粘贴到中)。如果要指定从
my_string
到值的映射,必须在冒号后面包含空格(或换行符)。您的错误消息可能来自下一行,因为您不能并列标量和键/值对。