Parsing a YAML document with a map at the root using snakeYaml(使用snakeYaml解析根有地图的YAML文档)
问题描述
我想将 YAML 文档读取到自定义对象的映射(而不是映射,snakeYaml 默认会这样做).所以这个:
I want to read a YAML document to a map of custom objects (instead of maps, which snakeYaml does by default). So this:
19:
typeID: 2
limit: 300
20:
typeID: 8
limit: 100
将加载到如下所示的地图:
Would be loaded to a map which looks like this:
Map<Integer, Item>
项目在哪里:
class Item {
private Integer typeId;
private Integer limit;
}
我找不到使用snakeYaml 的方法,也找不到更好的库来完成这项任务.
I could not find a way to do this with snakeYaml, and I couldn't find a better library for the task either.
文档仅包含嵌套在其他对象中的地图/集合的示例,因此您可以执行以下操作:
The documentation only has examples with maps/collections nested inside other objects, so that you can do the following:
TypeDescription typeDescription = new TypeDescription(ClassContainingAMap.class);
typeDescription.putMapPropertyType("propertyNameOfNestedMap", Integer.class, Item.class);
Constructor constructor = new Constructor(typeDescription);
Yaml yaml = new Yaml(constructor);
/* creating an input stream (is) */
ClassContainingAMap obj = (ClassContainingAMap) yaml.load(is);
但是当 Map 格式位于文档的根目录时,我该如何定义它呢?
But how do I go about defining the Map format when it is at the root of the document?
推荐答案
你需要添加一个自定义构造函数.但是,在您的情况下,您不想注册项目"或项目列表"标签.
You need to add a custom Constructor. However, in your case you don't want register an "item" or "item-list" tag.
实际上,您希望将 Duck Typing 应用于您的 Yaml.这不是超级高效,但有一种相对简单的方法可以做到这一点.
In effect, you want to apply Duck Typing to your Yaml. It's not super efficient, but there is a relatively easy way to do this.
class YamlConstructor extends Constructor {
@Override
protected Object constructObject(Node node) {
if (node.getTag() == Tag.MAP) {
LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>) super
.constructObject(node);
// If the map has the typeId and limit attributes
// return a new Item object using the values from the map
...
}
// In all other cases, use the default constructObject.
return super.constructObject(node);
这篇关于使用snakeYaml解析根有地图的YAML文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用snakeYaml解析根有地图的YAML文档
基础教程推荐
- Java:带有char数组的println给出乱码 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 降序排序:Java Map 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01