无法从 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<String,String> myMap = new HashMap<String, String>();
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 匹配的解决方案。

任何帮助,将不胜感激。

NOTE: This JSON mentioned here is different a JSON without Key , for the first element it has value directly and inside that value it has key:value 对。我不确定如何访问值内的 key:value 对。

原文由 Ashish 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 938
2 个回答

创建一个简单的 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<MyClass> myObjects = mapper.readValue(mapData , new TypeReference<List<MyClass>>(){});

或者

byte[] mapData = Files.readAllBytes(Paths.get("process.txt"));

ObjectMapper objectMapper=new ObjectMapper();
 //add this line
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

List<MyClass> myObjects = mapper.readValue(mapData , mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class));

myObjects 将包含 ListMyClass 。现在您可以根据需要访问此列表。

原文由 Vikrant Kashyap 发布,翻译遵循 CC BY-SA 3.0 许可协议

引发此异常是因为您试图在 List 中反序列化 Map

解决方案是创建 List<Map<String, Object>> 的 TypeReference:

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

原文由 freedev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题