java - 地图获取方式> 从 yaml 使用snakeyaml
问题描述
尝试从 yaml 加载数据并创建以下对象:
问题:无法将 yaml 映射到对象,当我尝试它时总是抛出异常:java.util.LinkedHashMap 无法转换为 com.heraizen.DataConfig$Data
Map<String,List<Data>> map;
代码片段:
public class DataConfig {
private Map<String, List<Data>> heros = new HashMap<String, List<Data>>();
public static class Data {
private String name;
private String uri;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
@Override
public String toString() {
return "Data [name=" + name + ", uri=" + uri + "]";
}
}
public Map<String, List<Data>> getHeros() {
return heros;
}
public void setHeros(Map<String, List<Data>> heros) {
this.heros = heros;
}
yaml:
---
heros:
one:
- name: h1
url: hu2
- name: h2
url: hu22
two:
- name: h3
url: hu3
构造对象:
Yaml yaml = new Yaml(new Constructor(DataConfig.class));
DataConfig retValue = (DataConfig) yaml.load(new FileInputStream("one.yaml"));
retValue.getHeros().entrySet().forEach(ele->{
System.out.println(ele.getKey()+" "+ele.getValue().get(0).getName());
});
System.out.println(retValue);
解决方案
由于DataConfig
不是 的子类型或超类型LinkedHashMap
,因此不能在此处使用强制转换。我不熟悉 yaml,但我可以假设该方法从您的异常描述中yaml.load()
返回 a 。LinkedHashMap
尝试编写一个属于DataConfig
将 a 转换为LinkedHashMap
a的静态方法DataConfig
:
public static DataConfig parseNew(LinkedHashMap map) {
}
推荐阅读
- c# - 当预期/想要(dd/mm/yyyy)时,如何处理美国(mm/dd/yyyy)日期时间?
- php - 当父母不存在时获取所有关系记录
- reactjs - 如何使用组件作为参数创建 HOC
- autodesk-forge - 来自 :urn/metadata/:guid/properties 的单位
- elasticsearch - 带有面向文档的弹性搜索的logstash输出
- r - 在 R 中使用广义混合模型
- azure-devops - 将 DevOps 板配置为只读
- java - 应该如何从 Spring Data Neo4j 6 中删除的 @Depth 注释迁移?
- reactjs - 来自 GCS 的带有公共 URL 的图像在状态更新后不会立即显示,但在刷新页面后可以工作
- powerbi - 如何计算标准。开发。使用 DAX/PowerBI 聚合行后的度量