Abh*_*eet 38 java json apache-camel jackson
我有如下json数组的字符串
{"Compemployes":[
{
"id":1001,
"name":"jhon"
},
{
"id":1002,
"name":"jhon"
}
]}
Run Code Online (Sandbox Code Playgroud)
我想将此jsonarray转换为List<Empolyee>.为此,我添加了maven依赖" camel-jackson"并为员工编写了pojo类.但当我尝试运行我的下面的代码
ObjectMapper mapper = new ObjectMapper();
List<Employe> list = mapper.readValue(jsonString, TypeFactory.collectionType(List.class, Employe.class));
Run Code Online (Sandbox Code Playgroud)
我得到以下例外.
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
at [Source: java.io.StringReader@43caa144; line: 1, column: 1]
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我缺少什么或做错了什么
Fre*_*ose 95
问题不在您的代码中,而是在您的json中:
{"Compemployes":[{"id":1001,"name":"jhon"}, {"id":1002,"name":"jhon"}]}
Run Code Online (Sandbox Code Playgroud)
这表示一个对象,其中包含属性Compemployes,它是Employee的列表.在这种情况下,您应该创建该对象,如:
class EmployeList{
private List<Employe> compemployes;
(with getter an setter)
}
Run Code Online (Sandbox Code Playgroud)
并且反序列化json只需:
EmployeList employeList = mapper.readValue(jsonString,EmployeList.class);
Run Code Online (Sandbox Code Playgroud)
如果您的json应该直接代表员工列表,它应该如下所示:
[{"id":1001,"name":"jhon"}, {"id":1002,"name":"jhon"}]
Run Code Online (Sandbox Code Playgroud)
最后一句话:
List<Employee> list2 = mapper.readValue(jsonString,
TypeFactory.collectionType(List.class, Employee.class));
Run Code Online (Sandbox Code Playgroud)
TypeFactory.collectionType被弃用,你现在应该使用这样的:
List<Employee> list = mapper.readValue(jsonString,
TypeFactory.defaultInstance().constructCollectionType(List.class,
Employee.class));
Run Code Online (Sandbox Code Playgroud)