我有一个Json文件,看起来像这样:
[
{ "field":"val" },
....
]
我有代表单个对象和它们的集合的Java对象:
public class Objects{
public Collection<List> myObject;
}
我想使用ObjectMapper
反序列化JSON。
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(in, Objects.class);
但是我得到:
11-24 23:19:19.828: W/UpdateService(6084): org.codehaus.jackson.map.JsonMappingException:
Can not deserialize instance of com.project.my.Objects out of START_ARRAY token
Try
mapper.readValue(in, ObjectClass[].class);
其中ObjectClass类似于:
public class ObjectClass {
String field;
public ObjectClass() { }
public void setField(String value) {
this.field = value;
}
}
注意:在你发布的Objects
类版本中,你声明了一个列表的集合(即列表的列表),这不是你想要的。你可能想要一个List<ObjectClass>
。但是,在与Jackson反序列化时只执行YourObject[].class
,然后转换为列表要简单得多。
您可以通过以下方式直接获得列表:
List<ObjectClass> objs =
mapper.readValue(in, new TypeReference<List<ObjectClass>>() {});
传递数组或列表类型有效,如@dmon所回答的。
为了完整起见,如果您希望逐一读取内容,还有一种增量方法:
Iterator<Objects> it = mapper.reader(Objects.class).readValues(in);
while (it.hasNext()) {
Objects next = it.next();
// ... process it
}
如果你有庞大的对象列表或序列,这是很有用的;