serialize online convert java json dictionary hashmap jackson

online - objectmapper java



Error al convertir una cadena JSON en un mapa en Java utilizando Jackson (2)

Tengo este pequeño código e intento convertir una cadena JSON en un mapa.

String json = "[{''code'':'':)'',''img'':''<img src=/faccine/sorriso.gif>''}]"; ObjectMapper mapper = new ObjectMapper(); Map<String,String> userData = mapper.readValue(json,new TypeReference<HashMap<String,String>>() { });

Pero devuelve el siguiente error:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.HashMap out of START_ARRAY token at [Source: java.io.StringReader@1b1756a4; line: 1, column: 1] at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198) at org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:151) at org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:25) at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2131) at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1402) at CodeSnippet_19.run(CodeSnippet_19.java:13) at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1.eval(ScrapbookMain1.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.evalLoop(ScrapbookMain.java:54) at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.main(ScrapbookMain.java:35)

¿Qué estoy haciendo mal?


Por lo que recuerdo, Jackson se usa para convertir json en clases de Java, probablemente esté esperando que el primer objeto sea un mapa, como

String json = "{''code'':'':)'',''img'':''<img src=/faccine/sorriso.gif>''}";


Derecha: le estás pidiendo a Jackson que trace un Matriz JSON en un objeto; no hay una manera obvia de hacer eso. Entonces, la respuesta de tofarr es correcta.

Pero si quisiera una lista o una matriz, podría lograrla fácilmente de la siguiente manera:

List<?> list = mapper.readValue(json, List.class);

O con referencia de tipo completo; opcional en este caso porque solo quiere listas, mapas y cadenas.