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 楼答案
上面的代码对我进行了解析。但由于需要结果变量,所以它位于
inputDetails
内。因此,您需要更改最后一行,如下所示: