xmlmapper new deserializar convert java jackson

new - xml string to object java jackson



Problema al intentar utilizar Jackson en java (4)

Alternativamente, analice el JSON usted mismo y cree cualquier POJO que desee crear. Hice eso para transformar JSON a JAXB.

Consulte la sección "Ejemplo de la API de transmisión" en http://wiki.fasterxml.com/JacksonInFiveMinutes

Es más fácil de lo que esperas.

Estoy tratando de usar Jackson para convertir algunos datos JSON en objetos Java, una lista de objetos para ser precisos, pero me sale este error:

org.codehaus.jackson.map.JsonMappingException: No se puede deserializar la instancia de entitylayer.Detail del token START_ARRAY

este es el codigo

ObjectMapper mapper = new ObjectMapper(); List<Detail> lcd = (List<Detail>) mapper.readValue(ld, Detail.class);

ld es la lista en formato Json, esta es la parte que me confunde en el tutorial de jackson . ¿Qué representa el nuevo archivo ("user.json") ? Asumí que esa era la cadena en formato json que quería convertir, por eso usé ld .

Espero que me puedas ayudar con eso.


Como estrategia alternativa, tratar con matrices es un poco más conveniente, ya que puede especificar fácilmente el tipo. Así que alternativamente también podrías hacer esto:

Detail[] details = mapper.readValue(ld, Detail[].class);

Las matrices son a menudo subutilizadas, al menos cuando se trata de Jackson. Siempre y cuando no tenga que modificar los resultados demasiado, son muy convenientes de usar, ya que los tipos están bien contenidos sin necesidad de usar genéricos (y como resultado, la seguridad de tipos es fuerte; no es solo la pelusa del compilador).


Cuando reciba este error, primero verifique si la cadena JSON a la que está intentando convertir es una cadena JSON adecuada. Si intenta crear su propia cadena JSON para realizar pruebas locales de su código, terminará obteniendo este error.


Desde el tutorial enlazado (otras colecciones funcionan de la misma manera):

Por lo tanto, si desea vincular datos en un mapa, deberá utilizar:

Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });

donde TypeReference solo se necesita para pasar la definición de tipo genérica (a través de cualquier clase interna en este caso): la parte importante es> que define el tipo al que se debe enlazar.

Si no hace esto (y simplemente pasa Map.class), la llamada es equivalente a vincular a Map (es decir, mapa "sin tipo"), como se explicó anteriormente.

Editar:

Si usted insiste en ser alimentado con cuchara:

List<Detail> lcd = mapper.readValue(ld, new TypeReference<List<Detail>>() {});