【发布时间】:2020-12-26 12:48:10
【问题描述】:
我正在尝试将我的 json 转换为地图 uisng jackson-core-2.9.6 。我的json是
{
"name": "Loren",
"inputDetails": {
"truncated": false,
"result": [
{
"subjects": [
{
"math": "50",
"SST": "37 ",
"status": "ACTIVE"
}
]
}
]
},
"timeoutInSeconds": null
}
我试图将这个 JSON 解析成 Map 的 Java 代码是这样的
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();
}
}
我得到的例外是
com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造java.util.LinkedHashMap 的实例(尽管至少存在一个创建者):没有从字符串值反序列化的字符串参数构造函数/工厂方法('{
“名称”:“洛伦”,
“输入细节”:{
“截断”:错误,
“结果”: [
{
“主题”:[
{
“数学”:“50”,
“SST”:“37”,
“状态”:“活动”
}
]
}
]
},
“timeoutInSeconds”:空
}')
在 [Source: (String)""{\r\n "name": "Loren",\r\n "inputDetails": {\r\n "truncated": false,\r\n "result": [ \r\n {\r\n "主题": [\r\n {\r\n "数学": "50",\r\n "SST": "37",\r\n "状态" : "活动"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n "timeoutInSeconds": null\r\n}"";行:1,列:1]
在 com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
在 com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1342)
在 com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1031)
在 com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:371)
在 com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:323)
在 com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:357)
在 com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
在 Test.main(Test.java:22)
我曾尝试研究 Stakoverflow 上的类似问题,但无法找到具有相似结构的 json,它同时具有字符串和对象。
【问题讨论】:
-
请提供更多细节,这段代码非常适合我
-
@DanielTaub 我已经添加了我的完整代码-com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造
java.util.LinkedHashMap的实例(尽管至少存在一个创建者):没有字符串参数从字符串值反序列化的构造函数/工厂方法 ('{ "name": "Loren", "inputDetails": { "truncated": false, "result": [ { "subjects": [ { "math": "50" ,“SST”:“37”,“状态”:“活动”