无法从START_ARRAY标记中反序列化java.util.HashMap的实例

使用jackson-core-2.7.3.jar解析JSON时遇到问题你可以从这里获取它们http://repo1.maven.org/maven2/com/fasterxml/jackson/core/

我的JSON文件是

[ { "Name": "System Idle Process", "CreationDate": "20160409121836.675345+330" }, { "Name": "System", "CreationDate": "20160409121836.675345+330" }, { "Name": "smss.exe", "CreationDate": "20160409121836.684966+330" } ] 

而Java代码是我试图解析的

 byte[] mapData = Files.readAllBytes(Paths.get("process.txt")); Map myMap = new HashMap(); ObjectMapper objectMapper=new ObjectMapper(); myMap = objectMapper.readValue(mapData, HashMap.class); System.out.println("Map is: "+myMap); 

但在执行时我收到了错误

 com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.HashMap out of START_ARRAY token at [Source: [B@34ce8af7; line: 1, column: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:216) at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:873) at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:869) at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmpty(StdDeserializer.java:874) at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:337) at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2872) 

我试过在stackoverflow上搜索但是找不到这种类型的JSON的匹配解决方案。

任何帮助,将不胜感激。

注意:这里提到的这个JSON与没有KeyJSON不同,对于第一个元素,它直接具有值,并且在该值内部具有key:value对。 我不知道如何访问key:value内的key:value对。

创建一个简单的pojo Class First

 class MyClass { @JsonProperty private String Name; @JsonProperty private String CreationDate; } 

并使用此代码…

 byte[] mapData = Files.readAllBytes(Paths.get("process.txt")); ObjectMapper objectMapper=new ObjectMapper(); //add this line objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); List myObjects = mapper.readValue(mapData , new TypeReference>(){}); 

要么

 byte[] mapData = Files.readAllBytes(Paths.get("process.txt")); ObjectMapper objectMapper=new ObjectMapper(); //add this line objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); List myObjects = mapper.readValue(mapData , mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class)); 

myObjects将包含MyClass List 。 现在您可以根据您的要求访问此列表。

看起来您的文件表示具有NameCreationDate字段的对象列表。

所以你必须使用List代替HashMap到ObjectMapper,代码如下所述:

 List dataAsMap = objectMapper.readValue(mapData, List.class); 

引发此exception是因为您尝试反序列化MapList

解决方案是创建List>的TypeReference:

 List> myObjects = mapper.readValue(mapData , new TypeReference>>(){});