YAML 中映射的映射中的文字
Literals in a mapping of mappings in YAML
如何使用 YAML 在映射的映射中创建文字?
我正在尝试使用 PyYAML. Based on YAML specs 将文字放入 YAML 中的映射映射中,映射映射是通过以下方式实现的:
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}
而保留换行符的文字是通过以下方式完成的:
stats: |
63 Home Runs
0.288 Batting Average
现在我正尝试将文字与映射的映射结合起来,如下所示:
Sammy Sosa: {
hr: 63,
avg: 0.288,
stats: |
63 Home Runs
0.288 Batting Average
}
并抛出错误:
yaml.scanner.ScannerError: while scanning for the next token
found character '|' that cannot start any token
in "test.yml", line 4, column 12
是否有其他方法或变通方法将文字放入 YAML 中映射的映射中?
你的 "literal" 更正式地称为 literal block style scalar. Apart from block style there is flow style。您正在为与键 Sammy Sosa
关联的值使用流样式。
在flow style you are not allowed to have block style
之内
YAML allows flow nodes to be embedded inside block collections (but not vice-versa).
,但这就是您尝试对键 stats
的值执行的操作。除此之外,您还没有足够缩进文字标量。
通过删除匹配 {
、}
和尾随 ,
,将流式映射更改为块式。对齐键(在块样式中需要)并适当缩进文字标量(即超过 stats
的开始列)。
这是有效的 YAML,相当于您想要实现的目标:
Sammy Sosa:
hr: 63
avg: 0.288
stats: |
63 Home Runs
0.288 Batting Average
您的第一个块样式映射中的流样式映射示例也可以重写为块样式映射中的块样式映射,如下所示:
Mark McGwire:
hr: 65
avg: 0.278
Sammy Sosa:
hr: 63
avg: 0.288
对于这个目的没有区别,但你也应该知道你使用的是 YAML 1.2 规范(从 2009 年开始),但是 Python 的 PyYAML 库只支持大多数较旧的 YAML 1.1(自 2005 年起)。
如何使用 YAML 在映射的映射中创建文字?
我正在尝试使用 PyYAML. Based on YAML specs 将文字放入 YAML 中的映射映射中,映射映射是通过以下方式实现的:
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}
而保留换行符的文字是通过以下方式完成的:
stats: |
63 Home Runs
0.288 Batting Average
现在我正尝试将文字与映射的映射结合起来,如下所示:
Sammy Sosa: {
hr: 63,
avg: 0.288,
stats: |
63 Home Runs
0.288 Batting Average
}
并抛出错误:
yaml.scanner.ScannerError: while scanning for the next token
found character '|' that cannot start any token
in "test.yml", line 4, column 12
是否有其他方法或变通方法将文字放入 YAML 中映射的映射中?
你的 "literal" 更正式地称为 literal block style scalar. Apart from block style there is flow style。您正在为与键 Sammy Sosa
关联的值使用流样式。
在flow style you are not allowed to have block style
之内YAML allows flow nodes to be embedded inside block collections (but not vice-versa).
,但这就是您尝试对键 stats
的值执行的操作。除此之外,您还没有足够缩进文字标量。
通过删除匹配 {
、}
和尾随 ,
,将流式映射更改为块式。对齐键(在块样式中需要)并适当缩进文字标量(即超过 stats
的开始列)。
这是有效的 YAML,相当于您想要实现的目标:
Sammy Sosa:
hr: 63
avg: 0.288
stats: |
63 Home Runs
0.288 Batting Average
您的第一个块样式映射中的流样式映射示例也可以重写为块样式映射中的块样式映射,如下所示:
Mark McGwire:
hr: 65
avg: 0.278
Sammy Sosa:
hr: 63
avg: 0.288
对于这个目的没有区别,但你也应该知道你使用的是 YAML 1.2 规范(从 2009 年开始),但是 Python 的 PyYAML 库只支持大多数较旧的 YAML 1.1(自 2005 年起)。