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

时间:2016-04-29 13:01:58

标签: java yaml snakeyaml

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

unit:
  &kg
  name: Kilogram

它会返回包含以下内容的地图:

{unit={name=Kilogram}}

使用锚点的引用在SnakeYAML中运行良好但是是否也可以从文档中获取锚名称?

代码段:

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

1 个答案:

答案 0 :(得分:2)

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

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

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

在我的python包ruamel.yaml中,它是PyYAML到YAML 1.2的更新,我实现了一个round_trip模式,它保留了注释和锚点。在构造过程中,我将注释和锚信息悬挂在要创建的对象上,这在Python中很容易实现,但AFAIK在Java中并不那么容易