无法将整数强制转换为JsonNode

时间:2014-03-24 16:55:33

标签: java json jackson

我遇到了投射错误,并且不知道如何解决这个问题。

 //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

1 个答案:

答案 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>>() {});