如何转换JSON字符串,如下所示:
{ "summary": {
"totalMR":4.599000000000903E12,
"totalMA":1.9174920000386694E11,
"totalQA":5.1111111181E9,
"totalQR":1.000020666115264E11
},
"result": [{},{}],
"success":"true",
"total":49
}
到Java对象。我经历了很多类似的帖子并实现了构造函数,但是找不到正确解释为什么我无法反序列化JSON。
我做错了吗?
我的班级:
public class expResponse {
private String success;
private String total;
private ArrayList<LinkedHashMap<String,Object>> result;
private LinkedHashMap<String,SummaryResponse> summary;
// Constructor: public expResponse(){}
// Getter and Setter
}
public class SummaryResponse {
private Float totalQR;
private Float totalQA;
private Float totalMR;
private Float totalMA;
public SummaryResponse(){}
// Setter and Getter
}
我的代码:
private expResponse processResult(String result) throws IOException{
ObjectMapper objectMapper = new ObjectMapper();
expResponse expResponseObj =
objectMapper.readValue(result, expResponse.class);
return expResponseObj;
答案 0 :(得分:2)
您发布的json不会反序列化为SummaryResponse对象的映射,而是一个单独的SummaryResponse对象。要使绑定工作,你必须让json看起来像这样:
{
...
'summary': {
'summary1': {"totalMR":4.599000000000903E12,"totalMA":1.9174920000386694E11,"totalQA":5.1111111181E9,"totalQR":1.000020666115264E11}
'summary2': {"totalMR":4.599000000000903E12,"totalMA":1.9174920000386694E11,"totalQA":5.1111111181E9,"totalQR":1.000020666115264E11}
}
...
}
或者,如果您需要使Java类符合您提供的json,则只需更改摘要声明:
private SummaryResponse summary;
答案 1 :(得分:1)
json中的字段摘要是SummaryResponse类型的对象,而不是LinkedHashMap。
public class ExpResponse {
private String success;
private String total;
private ArrayList<LinkedHashMap<String,Object>> result;
private Summary summary;
}
答案 2 :(得分:1)
我认为你的代码中没有问题。您的输入失败,因为格式不正确。如果您尝试将具有相同值的对象中的相同值写入字符串,则会得到类似的内容:
{
"success":"true",
"total":"49",
"result":null,
"summary":{
"one_summary":{
"totalQR":2000.0,
"totalQA":1500.0,
"totalMR":1000.0,
"totalMA":500.0
}
}
}
主要区别在于一个总结。这是因为summary
是map
而maps
每key
需要entryset
。这意味着summary
是您的地图,其中包含one_summary
密钥。
答案 3 :(得分:0)
是否无法反序列化的SummaryResponse?
我猜您的属性应该具有相同的名称“totalMR”,“totalMA”.... 或者你应该使用注释JsonProperty(value =“totalMR”)等等。