Cho tệp .json sau:
[
{
"name" : "New York",
"number" : "732921",
"center" : [
"latitude" : 38.895111,
"longitude" : -77.036667
]
},
{
"name" : "San Francisco",
"number" : "298732",
"center" : [
"latitude" : 37.783333,
"longitude" : -122.416667
]
}
]
Tôi đã chuẩn bị hai lớp để đại diện cho dữ liệu được chứa:
public class Location {
public String name;
public int number;
public GeoPoint center;
}
...
public class GeoPoint {
public double latitude;
public double longitude;
}
Để phân tích cú pháp nội dung từ tệp .json, tôi sử dụng Jackson 2.2.x và chuẩn bị phương pháp sau:
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;
}
Miễn là tôi bỏ qua thuộc center
tính, tất cả nội dung có thể được phân tích cú pháp. Tuy nhiên, khi tôi cố gắng phân tích cú pháp tọa độ địa lý, tôi nhận được thông báo lỗi sau:
com.fasterxml.jackson.databind.JsonMappingException: Không thể giải mã hóa phiên bản
com.example.GeoPoint ra khỏi mã thông báo START_ARRAY tại [Nguồn: android.content.res.AssetManager$AssetInputStream@416a5850; dòng: 5, cột: 25]
(thông qua chuỗi tham chiếu: com.example.Location ["center"])
center
là một mảng các đối tượng không hợp lệ. Cố gắng thay thế [
và ]
bằng {
và }
trong chuỗi JSON xung quanh longitude
và latitude
vì vậy chúng sẽ là các đối tượng.