如何使用camel-jackson将JSONArray转换为Object of List

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)