Given the following .json file:
[ { "name" : "New York", "number" : "732921", "center" : [ "latitude" : 38.895111, "longitude" : -77.036667 ] }, { "name" : "San Francisco", "number" : "298732", "center" : [ "latitude" : 37.783333, "longitude" : -122.416667 ] } ]
I prepared two classes to represent the contained data:
public class Location { public String name; public int number; public GeoPoint center; }
...
public class GeoPoint { public double latitude; public double longitude; }
In order to parse the content from the .json file I use Jackson 2.2.x and prepared the following method:
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; }
As long as I leave out the center
property all content can be parsed. However, when I try to parse the geo-coordinates I end up with the following error message:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of
com.example.GeoPoint out of START_ARRAY token at [Source: android.content.res.AssetManager$AssetInputStream@416a5850; line: 5, column: 25]
(through reference chain: com.example.Location["center"])