Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换LinkedHashMap<;字符串,MyClass>;到Java对象_Java_Json_Casting_Jackson_Pojo - Fatal编程技术网

转换LinkedHashMap<;字符串,MyClass>;到Java对象

转换LinkedHashMap<;字符串,MyClass>;到Java对象,java,json,casting,jackson,pojo,Java,Json,Casting,Jackson,Pojo,如何转换JSON字符串,如下所示: { "summary": { "totalMR":4.599000000000903E12, "totalMA":1.9174920000386694E11, "totalQA":5.1111111181E9, "totalQR":1.000020666115264E11 }, "result": [{},{}], "success":"true", "total":49 } { ... 'summary

如何转换JSON字符串,如下所示:

{ "summary": {
    "totalMR":4.599000000000903E12,
    "totalMA":1.9174920000386694E11,
    "totalQA":5.1111111181E9,
    "totalQR":1.000020666115264E11
  },
  "result": [{},{}],
  "success":"true",
  "total":49
}
{
 ...
  '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

我做错什么了吗

我的班级:

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
}

是不能反序列化的SummaryResponse吗

我想你的属性应该有相同的名字“totalMR”,“totalMA”。。。。
或者您应该使用注释JsonProperty(value=“totalMR”)等等。

您发布的json不会反序列化为SummaryResponse对象的映射,而是单个SummaryResponse对象。要使绑定正常工作,必须使用类似以下内容的json:

{ "summary": {
    "totalMR":4.599000000000903E12,
    "totalMA":1.9174920000386694E11,
    "totalQA":5.1111111181E9,
    "totalQR":1.000020666115264E11
  },
  "result": [{},{}],
  "success":"true",
  "total":49
}
{
 ...
  '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,只需更改summary的声明:

private SummaryResponse summary;

json中的字段摘要是SummaryResponse类型的对象,而不是LinkedHashMap

public class ExpResponse {
  private String success;
  private String total;
  private ArrayList<LinkedHashMap<String,Object>> result;
  private Summary summary;
}
公共类ExpResponse{
私人字符串成功;
私有字符串总数;
私有数组列表结果;
非公开摘要;
}

我认为您的代码没有问题。您的输入失败,因为它的格式不正确。如果尝试从具有相同值的对象将相同值写入字符串,则会得到如下结果:

{
   "success":"true",
   "total":"49",
   "result":null,
   "summary":{
      "one_summary":{
         "totalQR":2000.0,
         "totalQA":1500.0,
         "totalMR":1000.0,
         "totalMA":500.0
      }
   }
}

主要的区别是一个总结。这是因为
summary
是一个
map
并且
map
需要为每个
入口集
设置一个
键。这意味着
summary
是您的映射,它有一个
one\u summary
键。

您使用的是哪个JSON库?您所说的“无法反序列化JSON”是什么意思?你有例外吗?丢失数据?你的电脑发出蓝烟了吗?这个答案不正确。他的字段名与他提供的json文档中的字段名匹配。。。。不记得确切的名字了。不管怎样,这只是答案的一部分,其他答案涵盖了整个问题issue@eric.v您可以单击“已编辑…以前”链接查看修订历史记录。所改变的只是缩进。@eric.v是正确的。代码的原始版本对属性有非常不同的名称。我道歉。然而,考虑到编辑(我们必须相信OP),这个答案仍然是不正确的。