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

时间:2014-01-09 09:29:16

标签: python ruby yaml

是否可以在PyYAML或Ruby的Psych引擎中禁用创建锚点和引用(并有效地列出冗余数据)?

也许我在搜索网页时遗漏了一些内容,但Psych似乎没有多少选项,我无法确定PyYAML是否允许这样做。

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

Ruby和Python是我选择的工具,但是如果还有一些其他相当简单的“展开”YAML文档的方式,它可能就是这样。

1 个答案:

答案 0 :(得分:8)

我在PyYAML网站(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(...)来电中的漂亮打印等。