给定以下.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
]
}
]
我准备了两个类来表示包含的数据:
public class Location {
public String name;
public int number;
public GeoPoint center;
}
...
public class GeoPoint {
public double latitude;
public double longitude;
}
为了解析.json文件中的内容,我使用了Jackson 2.2.x并准备了以下方法:
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;
}
只要不使用center
属性,就可以解析所有的内容。但是,当我尝试解析地理坐标时,我得到了以下错误消息:
com.fasterxml.jackson.databind.JsonMappingException:无法反序列化的示例
在[源:资源管理器$资源输入流@416a5850;行:5,列:二十五]
(通过参考链:地点[“中心”])
5条答案
按热度按时间qxgroojn1#
Jackson对象Map器引发了
JsonMappingException: out of START_ARRAY token
异常,因为它需要Object {}
,但在响应中找到了Array [{}]
。这可以通过在
geForObject("url",Object[].class)
的参数中将Object
替换为Object[]
来解决。参考资料:vxf3dgd42#
您的JSON字符串格式错误:
center
的类型是无效对象的数组。在longitude
和latitude
周围的JSON字符串中,将[
和]
替换为{
和}
,使它们成为对象:xmq68pz93#
我把这个问题分类为验证www.example.com的jsonJSONLint.com,然后纠正它。这是相同的代码。
注意:
MyPojo[].class
是json属性的getter和setter的类。结果:
ih99xse14#
如上所述,
JsonMappingException: out of START_ARRAY token
异常是由Jackson对象Map器抛出的,因为它期望的是Object {}
,而它在响应中找到的是Array [{}]
。一个更简单的解决方案是将方法
getLocations
替换为:另一方面,如果你没有像
Location
这样的pojo,你可以用途:pwuypxnk5#
例如:
资料类别
当您使用ToDo::class.java但不使用Array::class.java作为json清单时,会掷回上述还原序列化错误
不起作用
异常错误:无法从[源:(字符串)"[{“id”:14,“text”:“TEST”,“completed”:true},{“id”:13,“text”:“TEST”,“completed”:true},{“id”:19,“text”:“TEST”,“completed”:true”[截断了84个字符];行:1,列:1】
工作