用Jackson&从json文件解析内容的问题消息-JsonMappingException-无法从START_ARRAY令牌中反序列化 [英] Issue with parsing the content from json file with Jackson & message- JsonMappingException -Cannot deserialize as out of START_ARRAY token
问题描述
给出以下.json文件:
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;
}
为了解析.json文件中的内容,我使用 Jackson 2.2.x 并准备了以下方法:>
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;
}
只要我省略center
属性,就可以解析所有内容.但是,当我尝试解析地理坐标时,出现以下错误消息:
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:无法反序列化
的实例 com.example.GeoPoint不在START_ARRAY令牌中,位于[来源:android.content.res.AssetManager$AssetInputStream@416a5850;行:5,列:25]
(通过参考链:com.example.Location ["center"])
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"])
推荐答案
您的JSON字符串格式不正确:center
的类型是无效对象的数组.在longitude
和latitude
周围的JSON字符串中将[
和]
替换为{
和}
,这样它们将成为对象:
Your JSON string is malformed: the type of center
is an array of invalid objects. Replace [
and ]
with {
and }
in the JSON string around longitude
and latitude
so they will be objects:
[
{
"name" : "New York",
"number" : "732921",
"center" : {
"latitude" : 38.895111,
"longitude" : -77.036667
}
},
{
"name" : "San Francisco",
"number" : "298732",
"center" : {
"latitude" : 37.783333,
"longitude" : -122.416667
}
}
]
这篇关于用Jackson&从json文件解析内容的问题消息-JsonMappingException-无法从START_ARRAY令牌中反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!