java - JSON HashMap deserialization -


i want deserialize json "{\"m\":{\"test\":{\"nombre\":\"jose\",\"apellidos\":\"jose\",\"edad\":30}}}" in personacontainer.

    public class persona {     private string nombre;     private string apellidos;     private int edad;      ... getters , setters;  }      public class personacontainer {      private map m = new hashmap<string,persona>();      public map getm() {         return m;     }      public void setm(map m) {         this.m = m;     }     } 

then i, create object of persona , put inside persona container next code

    public class myjsontest {      public static void main(string args[]) {         objectmapper mapper = new objectmapper();         map m = new hashmap<string,persona>();          persona p = new persona();         p.setnombre("jose");         p.setapellidos("jose");         p.setedad(30);         m.put("test", p);          personacontainer per = new personacontainer();         per.setm(m);          //convert map json string         try {             system.out.println(mapper.writevalueasstring(per));         } catch (ioexception e) {             e.printstacktrace();         }          // convert json map          string json = "{\"m\":{\"test\":{\"nombre\":\"jose\",\"apellidos\":\"jose\",\"edad\":30}}}";         try {             personacontainer pers = mapper.readvalue(json, personacontainer.class);             persona per1 = (persona) pers.getm().get("test");             system.out.println(per1.getnombre());         } catch (exception e) {             e.printstacktrace();         }  }  } 

after serialization, use objectmapper deserialize json in personacontainer object, when try obtain "test" hashmap "m" , cast person object error:

java.lang.classcastexception: java.util.linkedhashmap cannot cast persona     @ myjsontest.main(myjsontest.java:52) 

any advice please?

given

private map m = ...; 

jackson has no idea types expect map's keys , values. therefore uses defaults. regular objects, uses linkedhashmap. in other words, deserialize

{"nombre":"jose","apellidos":"jose","edad":30} 

into linkedhashmap instance. when try use persona, fails classcastexception.

instead, don't use raw types. declare map proper generic arguments.

private map<string, persona> m = ...; 

note spring deserialize corresponding json (m) linkedhashmap, not hashmap. if want hashmap, declare field type hashmap.


Comments