如何将 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<Map<String, Object>>
。
更新:
另外,您说您的 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] -> [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?
在Jackson中将Java对象转换为JsonNode [重复]