java - 整数无法转换为 JsonNode

标签 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):

   Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be    cast to com.fasterxml.jackson.databind.JsonNode

最佳答案

您没有在映射中指定键和值的类型:

mapper.readValue(new File(path), Map.class);

结果是 Jackson 将尝试映射到它所知道的最佳类型;对于成员名称,很简单,它是一个String;对于值,它读取一个 JSON 数字,这个 JSON 数字没有小数点,它适合 int --> Integer 它是。

如果您希望显式序列化为给定的值类型,则必须执行以下操作:

mapper.readValue(new File(path), new TypeReference<Map<String, JsonNode>>() {});

关于java - 整数无法转换为 JsonNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22615723/

相关文章:

java - DAO vs ORM( hibernate )模式

javascript - 使用 jQuery 和/或 Javascript 报告 JSON 对象中的语法错误

java - 使用 Jackson 序列化和反序列化任意值

java - 计算字符串中连续重复出现的字符数

java - Oracle 函数中的默认值

java - 为什么 AES 产生不同的结果,为什么 DES 不产生

javascript - Vue.js - 如何逐个对象获取 JSON 数据?

ios - 来自 swift 前端的 POST 请求问题

java - 如何更改从 JSON Schema 生成的 POJO 的格式?

json - 使用 Jackson 反序列化 protected 构造函数