SnakeYAML:是否可以获取对象的锚名称?

SnakeYAML: Is it possible to get the anchor name of an object?

当我使用 SnakeYAML 加载以下文档时:

unit:
  &kg
  name: Kilogram

它 returns 具有以下内容的地图:

{unit={name=Kilogram}}

锚点引用在 SnakeYAML 中效果很好,但是否也可以从文档中获取锚点名称?

代码片段:

String text = "unit:\n  &kg\n  name: Kilogram\n";
System.out.println(new Yaml().load(text));  // -> {unit={name=Kilogram}}

SnakeYAML 最初是基于 PyYAML 的,该代码通过保持从锚点名称到它在解析期间创建的对象的映射来解析锚点。 如果解析器稍后遇到引用,它会在锚点中查找名称并知道为为锚点创建的对象创建一个 link。

在 PyYAML 中,此映射位于 Composer 对象的代码中,该属性被适当地称为 anchors。 SnakeYaml 这是 still called the same.

您需要做的是遍历该映射并将值与您的对象(对)的(引用)进行比较。如果它们匹配,则属于该值的键几乎可以肯定是锚点名称。


在我的 python 包 ruamel.yaml 中,它是 PyYAML 到 YAML 1.2 的更新,我实现了 round_trip 模式,它保留了评论和锚点等内容.在构造过程中,我将评论和锚点信息挂在要创建的对象上,这在 Python 中很容易做到,但 AFAIK 在 Java

中并不容易