如何将JSON字符串转换为Java对象的列表?

Nit*_*esh 26 java json jackson jackson-databind

这是我的JSON数组: -

[ 
    {
        "firstName" : "abc",
        "lastName" : "xyz"
    }, 
    {
        "firstName" : "pqr",
        "lastName" : "str"
    } 
]
Run Code Online (Sandbox Code Playgroud)

我在我的String对象中有这个.现在我想将它转换为Java对象并将其存储在Java对象的List中.例如在Student对象中.我使用下面的代码将其转换为Java对象列表: -

ObjectMapper mapper = new ObjectMapper();
StudentList studentList = mapper.readValue(jsonString, StudentList.class);
Run Code Online (Sandbox Code Playgroud)

我的列表类是: -

public class StudentList {

    private List<Student> participantList = new ArrayList<Student>();

    //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我的学生对象是: -

class Student {

    String firstName;
    String lastName;

    //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?我得到以下异常: -

Exception : com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.aa.Student out of START_ARRAY token
Run Code Online (Sandbox Code Playgroud)

Man*_*dis 49

你要求杰克逊解析一个StudentList.告诉它解析List(学生).由于List是通用的,您通常会使用StudentList

List<Student> participantJsonList = mapper.readValue(jsonString, new TypeReference<List<Student>>(){});
Run Code Online (Sandbox Code Playgroud)


Sob*_*han 16

对于任何正在寻找答案的人:

1.将jackson-databind库添加到 Gradle 或 Maven 等构建工具中

2.在你的代码中:

ObjectMapper mapper = new ObjectMapper();

List<Student> studentList = new ArrayList<>();

studentList = Arrays.asList(mapper.readValue(jsonStringArray, Student[].class));
Run Code Online (Sandbox Code Playgroud)


小智 6

对于这种情况,您也可以使用 Gson。

Gson gson = new Gson();
NameList nameList = gson.fromJson(data, NameList.class);

List<Name> list = nameList.getList();
Run Code Online (Sandbox Code Playgroud)

您的 NameList 类可能如下所示:

class NameList{
 List<Name> list;
 //getter and setter
}
Run Code Online (Sandbox Code Playgroud)