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:
- Análisis de JSON y guardarlos en la base de datos SQLite
- ArrayAdapter: Los datos de Json se enviarán a spinner
- Cómo convertir JSONArray a ListView?
- Retrofit 2 RxJava - Gson - Deserialización "Global", tipo respuesta de cambio
- Pruebe la carpeta de recursos con Robolectric y Gradle
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"])
- @IntDef Anulación de soporte de Android con deserialización de Jackson
- Archivo json de Android Beam
- Google Place API - autocompletar - cómo obtener código postal?
- Gson - convierta de Json a una clase ArrayList <T>
- Android - ¿Mejor alternativa a la lista expandible?
- JSON elemento de verificación Java es un JSONArray o JSONObject
- Crear un JSONArray
- Almacenamiento de datos de Android, Cuándo utilizar SqlLite y cuándo usar JSON, alternativas de Linq
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:
- Ref.1
- Ref.2
- Ref.3
- Android 4.3: BLE: Comportamiento de filtrado de startLeScan ()
- Android Studio "La compatibilidad con NDK actual está obsoleta"