java - 如何使用 Camel jackson 将 JSONArray 转换为对象列表

标签 java json jackson apache-camel

我的 json 数组字符串如下

{"Compemployes":[
    {
        "id":1001,
        "name":"jhon"
        },
        {
                "id":1002,
        "name":"jhon"
        }
]}

我想将此 jsonarray 转换为 List<Empolyee> .为此,我添加了 maven 依赖项“camel-jackson”,并为员工编写了 pojo 类。但是当我尝试运行下面的代码时

 ObjectMapper mapper = new ObjectMapper();
 List<Employe> list = mapper.readValue(jsonString, TypeFactory.collectionType(List.class, Employe.class));

我遇到了以下异常。

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]

有人可以告诉我缺少什么或做错了什么

最佳答案

问题不在于您的代码,而在于您的 json:

{"Compemployes":[{"id":1001,"name":"jhon"}, {"id":1002,"name":"jhon"}]}

this 表示一个包含属性 Compemployes 的对象,该属性是 员工。在这种情况下,您应该像这样创建该对象:

class EmployeList{
    private List<Employe> compemployes;
    (with getter an setter)
}

反序列化 json 只需:

EmployeList employeList = mapper.readValue(jsonString,EmployeList.class);

如果您的 json 应该直接表示员工列表,它应该如下所示:

[{"id":1001,"name":"jhon"}, {"id":1002,"name":"jhon"}]

最后一句话:

List<Employee> list2 = mapper.readValue(jsonString, 
TypeFactory.collectionType(List.class, Employee.class));

TypeFactory.collectionType 已被弃用,您现在应该使用类似:

List<Employee> list = mapper.readValue(jsonString,
TypeFactory.defaultInstance().constructCollectionType(List.class,  
   Employee.class));

关于java - 如何使用 Camel jackson 将 JSONArray 转换为对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19271065/

相关文章:

java - 将 YAML 反序列化为 JAVA

java - 在Java中使用JSON文件解析base64

java - 使用 SQL 将 Date Java 与数据库表中的 DateTime 列进行比较

java - 查询显示额外行

PHP JSON 解码 - stdClass

java - JPQL @query 与 json 的关系表

java - 线程 "main"java.lang.NoClassDefFoundError : com/fasterxml/jackson/annotation/JsonAutoDetect Error when trying to convert json to POJO 中的异常

java - 如何使用 java 创建 Excelsheet 中数据的文件夹和子文件夹

Java 时间显示意外结果?

javascript - JSON 将级别转换为数组 (Javascript)