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

是否可以使用Ruby或Python在禁用锚/引用的情况下发出有效的YAML?,python,ruby,yaml,Python,Ruby,Yaml,可以在PyYAML或Ruby的Psych引擎中禁用创建锚和引用(并有效地显式列出冗余数据)吗 也许我在搜索网页时漏掉了一些东西,但在Psych中似乎没有太多选项,我也无法确定PyYAML是否允许这样做 其基本原理是我必须序列化一些数据,并以可读的形式将其传递给不是真正的技术合作者进行手动验证。有些数据是多余的,但为了可读性,我需要以最明确的方式列出它们(锚和引用对于效率来说是一个很好的概念,但对于人类可读性来说不是) Ruby和Python是我选择的工具,但是如果有其他合理简单的方法来“展开”Y

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

也许我在搜索网页时漏掉了一些东西,但在
Psych
中似乎没有太多选项,我也无法确定
PyYAML
是否允许这样做

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


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

我在PyYAML网站()上找到了这个相关的标签,看起来可以通过使用自定义转储程序来禁用锚,如下所示:

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(…)
调用中自定义进一步的属性,以确保打印效果等。

您能用expamples解释一下吗。。。?我看不到web、yaml和锚之间的联系。@majioa没有涉及“web”-
anchor
在这个上下文中是yaml语法的内部元素。看见显然可以通过复制对象来禁用它们(例如,在对象标识的情况下肯定会使用它们,但在对象相等的情况下(例如,对于Ruby数组),我似乎无法获得一致的模式),但在嵌套结构较深的情况下,这将成为一项繁琐的任务。但是我没有尝试深度复制库。我不认为存储/读取数组有问题,它们将包含您在YAML文件中指定的元素。或者你是说别的什么?我明白了,你想重用YAML代码,对吗?我只是尝试加载wiki中示例中指定的YAML文件。它正确地使用了锚。就我所见,它工作得非常好。谢谢-+1并接受我的建议;)对于Ruby: