【问题标题】:How to convert JsonNode to Map如何将 JsonNode 转换为 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 转换为地图?

【问题讨论】:

    标签: java playframework jackson graphql


    【解决方案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]
    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多