如何使用 SnakeYaml 加载自定义对象列表

2024-01-12

我一直在尝试将以下 yaml 反序列化为List<Stage>使用 SnakeYaml:

- name: Stage1
  items: 
    - item1
    - item2

- name: Stage2
  items: 
    - item3

public class Stage {
    private String name;
    private List<String> items;

    public Stage() {
    }

    public Stage(String name, List<String> items) {
        this.name = name;
        this.items = items;
    }

    // getters and setters
}

我发现的最接近的问题是SnakeYaml 反序列化包含对象列表的类 https://stackoverflow.com/questions/42545091/snakeyaml-deserialise-class-containing-a-list-of-objects。 读完后我知道Constructor and TypeDescriptor类,但我仍然无法让它工作(我得到 HashMap 列表,而不是阶段)。

与上面链接中的问题的区别在于我的顶级结构是一个列表,而不是自定义对象。


一种方法是创建自己的 Snakeyaml 构造函数,如下所示:

public class ListConstructor<T> extends Constructor {
  private final Class<T> clazz;

  public ListConstructor(final Class<T> clazz) {
    this.clazz = clazz;
  }

  @Override
  protected Object constructObject(final Node node) {
    if (node instanceof SequenceNode && isRootNode(node)) {
      ((SequenceNode) node).setListType(clazz);
    }
    return super.constructObject(node);
  }

  private boolean isRootNode(final Node node) {
    return node.getStartMark().getIndex() == 0;
  }
}

然后在构建 Yaml 时使用它:

final Yaml yaml = new Yaml(new ListConstructor<>(Stage.class));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SnakeYaml 加载自定义对象列表 的相关文章

随机推荐

  • 选择随机函数

    我有一个函数列表 function randomiseiconscycle1 iconTwoContainer img iconFiveContainer img iconSevenContainer img fadeIn 300 setT
  • Postgres Select ILIKE %text% 在大字符串行上运行缓慢

    我有一个只有 7 列的表 其中一列存储每一行 的长文本数据 该文本列数据的平均字符长度约为 1500 个字符 该表有 500 000 行 当我使用选择查询而不使用该文本列时 没有问题 查询按预期需要 10 秒 但是如果我将这个长文本列添加到
  • CGAL,裁剪在矩形内的 voronoi 图

    我使用 CGAL 和 Qt 来绘制 Voronoi 图 我用了CGAL Voronoi diagram 2
  • 如何使用 DAO 插入雪花变体字段?

    我有以下代码 RegisterMapper MyEntity ResultMapper class UseStringTemplate3StatementLocator public interface MyDao Transaction
  • 在 thread.join() 之后调用线程会看到局部变量的修改吗?

    在最简单的示例中 假设我有一个启动线程的函数 该函数又将局部变量的值设置为 true 我们加入线程 然后离开函数 bool func bool b false std thread t b true t join return b 该函数会
  • 澳大利亚手机号码正则表达式验证需要在号码之间留有空格

    我需要验证手机号码 第一个以 04 开头的文本输入 总共 10 位数字 包括 04 例如 0412345678 我的输入字段在下面
  • 使用听写 - iOS 6 - DidStart?

    如何回应starting听写 响应听写的已知方法 dictationRecordingDidEnd 响应完成的承认 短语 听写识别失败 回复failed听写识别 参考 UITextInput 协议参考 从 iOS 5 1 开始 当用户在支持
  • 动态创建变量是个好主意吗?

    最近发现了如何通过这个方法在python中动态创建变量 vars my variable Some Value 从而创建变量my variable 我的问题是 这是个好主意吗 或者我应该总是提前声明变量 我认为如果可能的话最好使用字典 va
  • 视频流基础设施

    我们想建立一个实时视频聊天网站 并正在寻找基本的架构建议和 或针对要使用的特定框架的推荐 以下是该网站的基本功能 大多数流媒体将由一个人通过网络摄像头等进行现场直播 通常由 1 10 人观看 但最多可能有 100 多名观众 音频和视频不必是
  • Spark 对分隔数据进行排序

    我是 Spark 新手 您能告诉我以下代码有什么问题吗 val rawData USA E001 ABC DE 19850607 IT 100 UK E005 CHAN CL 19870512 OP 200 USA E003 XYZ AB
  • 获取上周唯一的最新数据并对某些列求和

    仅获取上周的最新数据并对某些列求和 我用数据 实际结果和预期做了一个例子 http rextester com HMB12638 http rextester com HMB12638 Taking first as example use
  • Select2限制标签数量

    有没有办法限制用户可以使用 Select2 添加到输入字段的标签数量 I have tags select2 containerCssClass supplierTags placeholder Usual suppliers minimu
  • 如何使用 Bash 获取屏幕会话中的命令历史记录?

    如果我开始一个屏幕会话screen dmS name 我如何使用脚本访问该屏幕会话的命令历史记录 Using the the last executed command appears even in screen 我在系统上使用默认的 b
  • 推理 Big O 的正式定义时遇到一些困难

    我的教授最近回顾了 Big O 的正式定义 老实说 即使他向几个不同的学生解释了它 我们似乎仍然没有理解它的核心 理解上的问题主要出现在我们经历的以下例子中 到目前为止 我的推理如下 当您将函数的最高项乘以常数时 您会得到一个新函数 该新函
  • 循环变量覆盖全局变量

    在Python中 为什么循环变量会覆盖已经定义的全局变量 将循环变量放入模块的全局命名空间而不是仅用于循环的新本地命名空间似乎违反直觉 这是一个显示我正在谈论的内容的示例 c 3 14 print before loop c format
  • 如何从 Blazor 中的另一个组件重新渲染组件?

    我有一个电子商务Blazor服务器项目 我想重新渲染推车组件将商品添加到购物车后产品组件 我尝试将 Cart 组件继承到 Product 组件 并运行 Cart 组件的公共方法来重新渲染其组件 添加到购物车方法产品组件 产品 剃须刀 pub
  • 如何对一周中每一天的每个小时进行分组和绘图

    我需要帮助弄清楚如何绘制子图 以便与显示的数据框进行轻松比较 Date A B C 2017 03 22 15 00 00 obj1 value a other 1 2017 03 22 14 00 00 obj2 value ns oth
  • Jenkins 管道:kubectl:未找到

    我有以下 Jenkinsfile node stage Apply Kubernetes files withKubeConfig credentialsId jenkins deployer serverUrl https 192 168
  • 当 AngularJS 控制器加载时运行一次

    我有一些事情只需要在控制器加载时完成一次 最好的方法是什么 我读过一些有关 运行块 的内容 但我不太明白它是如何工作的 一些伪代码 when app resolove some stuff load a view controllerA C
  • 如何使用 SnakeYaml 加载自定义对象列表

    我一直在尝试将以下 yaml 反序列化为List