【发布时间】:2020-04-09 15:21:48
【问题描述】:
我从外部文件源获取以下 JSON 数据。
{
.... More complicated structures within this JSON format above but I only care about the following
"feature": {
"100": {
"DATA1": [
{
"header": "head1",
"someId": "123"
}
]
}
}
}
我正在尝试将以下部分捕获为 List
"DATA1": [
{
"header": "head1",
"someId": "123"
}
]
但无法这样做。出现以下错误:
无法将 LinkedHashMap 转换为 List。
获取数据并尝试将其分配给 List
的方法private void getData(){
AllDataFromFile all = someFetchAPI(); // Got every JSON data in the file.
// capturing the portion that I want which I do get.
Map<String, Map<String,Object>> feature = all.getFeature();
Map<String, Object> allData = feature.get("100");
List<Data> dataList = allData.get("DATA1");
}
上面没有编译或运行时错误,但 dataList 不是数据列表。
当我在调试模式下看到时,它是一个 LinkedHashMap 列表。为什么? 我怎样才能把它变成一个数据列表呢?
由于它不映射为列表,我无法执行如下操作。
dataList.get(0).getHeader().
也无法转换并得到相同的错误:
无法将 LinkedHashMap 转换为 List。
请指教。谢谢。
AllDataFromFile 类
@Getter
@Setter
@JsonInclude(Include.NON_NULL)
public class AllDataFromFile {
private Map<String, Map<String,Object>> feature;
}
数据类
@JsonInclude(Include.NON_NULL)
public class Data implements Comparable<Data>, Cloneable{
private String header;
private String someId;
@Override
public int compareTo(Data o) {
int result = // some logic
return result;
}
}
编辑:
这是List里面的数据格式
result = {ArrayList@18590} size = 1
0 = {LinkedHashMap@18593} size = 2
"header" -> "header1"
"someId" -> "id1"
当我尝试将对象的值匹配为更具体如下时出现以下错误。
private Map<String, Map<String, List<Data>>> feature;
如果我执行以下操作,则可以返回获取 LinkedHashMap(没用,返回 Square one):
private Map<String, Map<String, List>> feature;
错误:
无法读取 JSON:类 java.util.LinkedHashMap 不是的子类型 【简单类型,com.a.a.a.a.a.Data类】(通过引用链: com.b.b.b.b.b.b.AllDataFromFile["feature"]->java.util.LinkedHashMap["100"]->java.util.LinkedHashMap["DATA1"]->java.util.ArrayList[0])
【问题讨论】:
-
打印
LinkedHashMap。它包含什么? -
@SotiriosDelimanolis 它包含我的标头和 someId 值。
-
那么你的 JSON 不包含数组。它包含一个对象值。
-
@SotiriosDelimanolis 不是列表。请参阅上述帖子中的编辑部分以查看结构。这就是现在 dataList 中的值。
-
哦,我误会了。我以为你的意思是
allData.get("DATA1")正在返回LinkedHashMap。您是说它返回List<LinkedHashMap>而不是List<Data>。您如何期望 Jackson 知道它应该将 JSON 数组反序列化为Data实例列表?你的类层次结构中没有任何东西可以做到这一点。