JsonMappingException: con el token START_ARRAY

Dado el siguiente archivo .json:

[ { "name" : "New York", "number" : "732921", "center" : [ "latitude" : 38.895111, "longitude" : -77.036667 ] }, { "name" : "San Francisco", "number" : "298732", "center" : [ "latitude" : 37.783333, "longitude" : -122.416667 ] } ] 

Preparé dos clases para representar los datos contenidos:

 public class Location { public String name; public int number; public GeoPoint center; } 

 public class GeoPoint { public double latitude; public double longitude; } 

Para analizar el contenido del archivo .json utilizo Jackson 2.2.x y preparé el siguiente método:

 public static List<Location> getLocations(InputStream inputStream) { ObjectMapper objectMapper = new ObjectMapper(); try { TypeFactory typeFactory = objectMapper.getTypeFactory(); CollectionType collectionType = typeFactory.constructCollectionType( List.class, Location.class); return objectMapper.readValue(inputStream, collectionType); } catch (IOException e) { e.printStackTrace(); } return null; } 

Siempre y cuando deje fuera la propiedad del center todo el contenido puede ser analizado. Sin embargo, cuando intento analizar las geo-coordenadas termino con el mensaje de error siguiente:

Com.fasterxml.jackson.databind.JsonMappingException: No se puede deserializar la instancia de
Com.example.GeoPoint de START_ARRAY token en [Origen: android.content.res.AssetManager$AssetInputStream@416a5850; Línea: 5, columna: 25]
(A través de la cadena de referencia: com.example.Location ["center"])

Su cadena JSON está mal formada: el tipo de center es una matriz de objetos no válidos. Reemplace [ y ] con { y } en la cadena JSON alrededor de la longitude y la latitude para que sean objetos:

 [ { "name" : "New York", "number" : "732921", "center" : { "latitude" : 38.895111, "longitude" : -77.036667 } }, { "name" : "San Francisco", "number" : "298732", "center" : { "latitude" : 37.783333, "longitude" : -122.416667 } } ] 

JsonMappingException: out of START_ARRAY token excepción de JsonMappingException: out of START_ARRAY token es lanzada por el asignador de objetos de Jackson como espera un Object {} mientras que encontró un Array [{}] en respuesta.

Esto puede resolverse reemplazando Object con Object[] en el argumento de geForObject("url",Object[].class) . Referencias:

  1. Ref.1
  2. Ref.2
  3. Ref.3
  • Límite de longitud en los parámetros JSON en la solicitud GET
  • cómo pasar los parámetros a RESTlet webservice de android?
  • Excepción no manipulada org.json.jsonexception
  • ¿Cómo utilizar Gson para serializar objetos en android?
  • Obtener el objeto JSON desde URL utilizando HTTPURLConnection en android
  • Cómo construir un servidor de notificación push de Android en PHP
  • Obtener datos de mysql a android con php
  • Android Google Services nuevo archivo de configuración preguntas
  • Android crea una cadena Json
  • Formato JSON Body for Retrofit de una sola cadena sin modelo
  • Convertir cadena a JsonArray
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.