Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token

Below mentioned is the JSON string, resultString:

{
"imageMaps": [{
        "crc": "c2c4",
        "flags": "0",
        "length": "117384",
        "index": 1,
        "version": "1.1.90ea",
        "status": ""
    }, {
        "crc": "7601",
        "flags": "8",
        "length": "117592",
        "index": 2,
        "version": "1.1.90ed",
        "status": ""
    }],
    "complete": true,
    "nextBootImageVersion": "",
    "lastKnownGoodImageVersion": "1.1.90ed",
    "runningImageVersion": "1.1.90ed"
}

I want to get the same converted to the object of class A:

public class A {

    private boolean complete;

    private String message;

    private String lastKnownGoodImageVersion;

    private String nextBootImageVersion;

    private String runningImageVersion;

    private Map<String, B> imageMaps;

    private  List<B> images;

    private MacID macId;

}

I am trying to convert the json to object of class A using the code :

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);    
A a = objectMapper.readValue(resultString, A.class);

Code for class B is:

public static class B {
    public String version;
    public int flags; 
    public int crc; 
    public long length; 
    public String index;
    public String status;
}

But getting the exception :

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token

like image 834
Random Coder Avatar asked Jun 25 '18 11:06

Random Coder


1 Answers

You declared property imageMaps as a Map<String, B> in your class, but in your JSON imageMaps is an array of B. The deserialization should work if you change imageMaps to images in your JSON.

like image 111
Konrad Botor Avatar answered Oct 09 '22 18:10

Konrad Botor