我遇到了投射错误,并且不知道如何解决这个问题。
//get my json file as Map
Map<String, JsonNode> cm = null;
try {
cm = mapper.readValue(new File(path), Map.class);
} catch (JsonParseException e) {...}
//add some key, value pairs to my map
JsonNodeFactory factory = JsonNodeFactory.instance;
ObjectNode node = factory.objectNode();
//add to a jsonNode
node.putAll(cm);
所以我得到一个例外,因为其中一个键值对看起来像这样:{“id”:7} 似乎没有办法将Integer(7)转换回json,即使它之前也是如此。
任何想法?
该例外:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to com.fasterxml.jackson.databind.JsonNode
答案 0 :(得分:2)
您没有在映射中指定键和值的类型:
mapper.readValue(new File(path), Map.class);
结果是杰克逊将尝试映射到它知道的最佳类型;对于会员名称,这很容易,它是String
;对于该值,它读取一个JSON编号,此JSON编号没有小数点,它适合int
- &gt; Integer
它是。
如果要显式序列化给定值类型,则必须执行以下操作:
mapper.readValue(new File(path), new TypeReference<Map<String, JsonNode>>() {});