删除折叠样式YAML块末尾的换行符

时间:2016-08-19 09:46:40

标签: php yaml

我使用Symfony的YAML组件来解析此问题中的YAML。

我有以下YAML:

db_driver: orm
service:
    user_provider: user_provider
    options:
        supported_scopes: >
            user_basic_information
            internal

以此字符串结尾:

"user_basic_information internal
"

但我喜欢这个字符串:

"user_basic_information internal"

我找到了以下解决方法:

service:
    user_provider: user_provider
    options:
        supported_scopes: >
            user_basic_information
            internal
db_driver: orm

此块以正确的字符串结束,没有换行符。我的YAML解析器是错误的还是缺少YAML语言定义?

是否有另一种方式来终止折叠样式块,所以我不必采用hacky方式做到这一点?

1 个答案:

答案 0 :(得分:2)

这两个问题的答案都是肯定的。向顶层或任何其他映射添加其他键值对不应影响折叠标量的最终换行符。

使用>folded block style,您总是会在文件末尾获得一个换行符,因为默认值是剪切:

  

如果未指定明确的chomping指示符,则剪切是使用的默认行为。在这种情况下,最终换行符将保留在标量的内容中。但是,任何尾随空行都会从标量内容中排除。

如果您不想这样做,请使用明确的chomping operator,在这种情况下,使用>-而不仅仅是>。 (当然假设您的解析器正确解释了这一点。)

在Python中,使用ruamel.yaml(我是作者)这可以正常工作:

import ruamel.yaml

yaml_str = """\
db_driver: orm
service:
    user_provider: user_provider
    options:
        supported_scopes: >-
            user_basic_information
            internal
"""

data = ruamel.yaml.safe_load(yaml_str)
print(repr(data['service']['options']['supported_scopes']))

您还可以检查在线herehere(此解析器还有其他一些问题)