java - SnakeYAML:是否可以获取对象的 anchor 名称?

标签 java yaml snakeyaml

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

unit:
  &kg
  name: Kilogram

它返回包含以下内容的 map :

{unit={name=Kilogram}}

anchor 引用在 SnakeYAML 中效果很好,但也可以从文档中获取 anchor 名称吗?

代码片段:

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

最佳答案

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

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

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


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

关于java - SnakeYAML:是否可以获取对象的 anchor 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939082/

相关文章:

java - 使用 jackson-dataformat-xml 重写 ArrayList XML 序列化

python - 如何在 conda environment.yml 文件中设置可选参数?

YamlLint 验证

java - jpql (JPA) 中重复的父子数据

java - 软件工程术语的需求本体

java - (Rest Api)回收器 View ,在android中的每行中带有接受和拒绝请求按钮

java - 将 dropwizard 项目部署到 heroku 时 yaml 中的 "Unrecognized Field: http"

kubernetes - Gitlab CI管道失败:标记问题

java - 如何通过java解析yaml文件(snakeYaml)

java - SnakeYAML 格式 - 删除 YAML 大括号