是否可以使用 Ruby 或 Python 发出禁用锚点/引用的有效 YAML?

2024-05-04

是否可以禁用创建锚点和引用(并有效地显式列出冗余数据)PyYAML或者红宝石的Psych引擎?

也许我在网上搜索时错过了一些东西,但似乎可用的选项并不多Psych我无法确定是否PyYAML也允许这样做。

理由是我必须序列化一些数据并以可读的形式将其传递给非技术性的同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它以提高可读性(锚点和引用是提高效率的一个很好的概念,但不利于人类可读性)。

Ruby 和 Python 是我选择的工具,但如果有其他相当简单的方法来“展开”YAML 文档,那么它可能就可以。


我在 PyYAML 网站上找到了这个相关的票证(http://pyyaml.org/ticket/91 http://pyyaml.org/ticket/91),看起来可以通过使用自定义转储器来禁用锚点,如下所示:

import yaml

class ExplicitDumper(yaml.SafeDumper):
    """
    A dumper that will never emit aliases.
    """

    def ignore_aliases(self, data):
        return True

因此,例如,使用标准转储器和新的显式转储器可以实现以下输出:

>>> yaml.dump([1L, 1L])
"[&id001 !!python/long '1', *id001]\n"

>>> yaml.dump([1L, 1L], Dumper=ExplicitDumper)
'[1, 1]\n'

您可以自定义更多属性以确保打印美观等yaml.dump(...) call.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 Ruby 或 Python 发出禁用锚点/引用的有效 YAML? 的相关文章

随机推荐