是否可以使用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: