如何将 JsonNode 转换为 Map

Posted

技术标签:

【中文标题】如何将 JsonNode 转换为 Map【英文标题】:How to convert JsonNode to Map 【发布时间】:2016-10-12 02:21:13 【问题描述】:

在服务器上使用 play framework java 我正在使用 graphiql 发出请求, 当我做final JsonNode variables = request().body().asJson().get("variables")时, 具有值的 JsonNode "\"id\":\"bar\"" ,现在我想把这个 JsonNode 转换成 Map, 我试过了

Json.mapper().convertValue(variables, new TypeReference<HashMap<String, Object>>() 
        );

但我不断收到此异常

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [map type; class java.util.HashMap, [simple type, class java.lang.String] -> [simple type, class java.lang.Object]] from String value ('"id":"bar"'); no single-String constructor/factory method at [Source: N/A; line: -1, column: -1]

我做错了什么?如何将该 JsonNode 转换为地图?

【问题讨论】:

【参考方案1】:

更改类型引用以使用Map 接口而不是HashMap 类。所以new TypeReference&lt;Map&lt;String, Object&gt;&gt;

更新: 另外,您说您的 JSON 节点具有值 "\"id\":\"bar\""。那不是 JSON 对象,而是 JSON 字符串。确保您的整个对象如下所示:


  "variables": 
    "id":"bar"
  ,
  "otherFields": ...

不是这样的:


  "variables": "\"id\":\"bar\"",
  "otherFields": ...

【讨论】:

类似错误Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [map type; class java.util.LinkedHashMap, [simple type, class java.lang.String] -&gt; [simple type, class java.lang.Object]] from String value ('"id":"bar"'); no single-String constructor/factory method at [Source: N/A; line: -1, column: -1]

以上是关于如何将 JsonNode 转换为 Map的主要内容,如果未能解决你的问题,请参考以下文章

Jackson Json:如何将数组转换为 JsonNode 和 ObjectNode?

Jackson 如何在不强制转换的情况下将 JsonNode 转换为 ArrayNode?

将 JsonNode 转换为 POJO

在Jackson中将Java对象转换为JsonNode [重复]

Neo4j 和 Spring-data Map 查询结果到 Jackson JsonNode

当前推荐的将 byte[] 转换为 JsonNode 并返回的方法