Search code examples
javajsoncastingjacksonpojo

Converting LinkedHashMap<String,MyClass> to Java Object


How can I convert the JSON string like this:

{ "summary": {
    "totalMR":4.599000000000903E12,
    "totalMA":1.9174920000386694E11,
    "totalQA":5.1111111181E9,
    "totalQR":1.000020666115264E11
  },
  "result": [{},{}],
  "success":"true",
  "total":49
}

to a Java object. I went through many similar posts and implemented constructors but couldn't find the proper explanation of why I'm unable to De-serialize the JSON.

Am I doing anything wrong?

My Class:

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
}

My Code:

private expResponse processResult(String result) throws IOException{
ObjectMapper objectMapper = new ObjectMapper();
expResponse expResponseObj = 
objectMapper.readValue(result, expResponse.class);
return expResponseObj;

Solution

  • The json you posted would not deserialize into a map of SummaryResponse objects, but rather an individual SummaryResponse object. To make your binding work, you would have to have json that looked something like this:

    {
     ...
      '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}
      }
     ...
    }
    

    Alternatively, if you need to make your Java class conform to the json you provided, you simply need to change the declaration of summary:

    private SummaryResponse summary;