有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法将Json字符串转换为Map<string,Object>

我正在尝试使用jackson-core-2.9.6将json转换为地图。我的json是

 {
  "name": "Loren",
  "inputDetails": {
  "truncated": false,
   "result": [
     {
    "subjects": [
      {
        "math": "50",
        "SST": "37 ",
        "status": "ACTIVE"
      }
    ]
  }
]
},
"timeoutInSeconds": null
}

我试图用Java代码将这个JSON解析成如下的映射

public static void main(String[]args){
    
    String request="{\r\n  \"name\": \"Loren\",\r\n  \"inputDetails\": {\r\n    \"truncated\": false,\r\n    \"result\": [\r\n      {\r\n        \"subjects\": [\r\n          {\r\n            \"math\": \"50\",\r\n            \"SST\": \"37 \",\r\n            \"status\": \"ACTIVE\"\r\n          }\r\n        ]\r\n      }\r\n    ]\r\n  },\r\n  \"timeoutInSeconds\": null\r\n}";
    try {  
            List servicesResponse = null;
            Map<String,Object> inputParam=null;
            ObjectMapper objectMapper = new ObjectMapper();
            request =  objectMapper.writeValueAsString(request);
            objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
            objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
            objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
            inputParam = (Map<String, Object>) objectMapper.readValue(request, Map.class);
            servicesResponse = (List)inputParam.get("result");
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
  }

我得到的例外是 通用域名格式。fasterxml。杰克逊。数据绑定。exc.MismatchedInputException:无法构造java.util.LinkedHashMap的实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方法从字符串值('{ “名字”:“罗兰”, “输入详细信息”:{ “截断”:错误, “结果”:[ { “主题”:[ { “数学”:“50”, “SST”:“37”, “状态”:“活动” } ] } ] }, “TimeOutingSeconds”:空 }') 在[Source:(String)“{\r\n”name:“Loren”,\r\n“inputDetails:{\r\n”truncated:“false”\r\n“result:[\r\n{\r\n”subjects:[\r\n{\r\n”math:“50”,\r\n“SST:“37”,\r\n“status:“ACTIVE”\r\n}\r\n}\r\n]\r\n},\r\n“timeoutInSeconds”:null\r\n}“”;行:1,列:1] 在com上。fasterxml。杰克逊。数据绑定。exc.MismatchedInputException。from(MismatchedInputException.java:63) 在com上。fasterxml。杰克逊。数据绑定。反序列化上下文。reportInputMismatch(反序列化上下文。java:1342) 在com上。fasterxml。杰克逊。数据绑定。反序列化上下文。HandleMissingInstallator(反序列化上下文。java:1031) 在com上。fasterxml。杰克逊。数据绑定。值得。值实例化器_createFromStringFallbacks(ValueInstantiator.java:371) 在com上。fasterxml。杰克逊。数据绑定。值得。std.stdValue实例化器。createFromString(StdValueInstantiator.java:323) 在com上。fasterxml。杰克逊。数据绑定。值得。std.MapDeserializer。反序列化(MapDeserializer.java:357) 在com上。fasterxml。杰克逊。数据绑定。值得。std.MapDeserializer。反序列化(MapDeserializer.java:29) 在com上。fasterxml。杰克逊。数据绑定。ObjectMapper_readMapAndClose(ObjectMapper.java:4013) 在com上。fasterxml。杰克逊。数据绑定。ObjectMapper。readValue(ObjectMapper.java:3004) 在测试中。main(Test.java:22)

我曾尝试研究Stakoverflow上的类似问题,但找不到具有类似结构的json,即同时包含字符串和对象


共 (1) 个答案

  1. # 1 楼答案

    上面的代码对我进行了解析。但由于需要结果变量,所以它位于inputDetails内。因此,您需要更改最后一行,如下所示:

    List servicesResponse = (List) ((Map<String, Object>)inputParam.get("inputDetails")).get("result");