【问题标题】:Remove line break at the end of a folded style YAML block删除折叠样式 YAML 块末尾的换行符
【发布时间】:2016-08-19 09:46:39
【问题描述】:

我使用 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 方式来做它?

【问题讨论】:

    标签: php yaml


    【解决方案1】:

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

    使用>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(不过这个解析器还有其他问题)

    【讨论】:

    • 感谢您的回答。 >- 也适用于 PHP 中的 symfony yaml 组件。虽然它有新的线路错误。
    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    相关资源
    最近更新 更多