如何将JsonNode转换为Map

时间:2016-06-11 03:45:26

标签: java playframework jackson graphql

在服务器上使用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 个答案:

答案 0 :(得分:0)

更改类型引用以使用Map接口而不是HashMap类。所以new TypeReference<Map<String, Object>>

更新:
此外,您说您的JSON节点的值为"{\"id\":\"bar\"}"。那不是JSON对象,那是一个JSON字符串。确保整个对象看起来像这样:

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

而不是这样:

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