我用这个方法读取一个json文件。
public class StudentListJson {
public static List<Student> getStudentList() throws IOException {
ObjectMapper mapper = new ObjectMapper();
List<Student> studentList = null;
String fileName = "C:/Users/bar1s/IdeaProjects/Week4/src/main/java/student.json";
String stringJson=new String(Files.readAllBytes(Paths.get(fileName)));
studentList=Arrays.asList(mapper.readValue(stringJson,new TypeReference<>(){}));
ProcessController.isReaded=true;
return studentList;
}
}
json文件:
[
{"name":"name1", "surname":"surname1", "age": 18},
{"name":"name2", "surname":"surname2", "age": 19},
{"name":"name3", "surname":"surname3", "age": 20},
{"name":"name4", "surname":"surname4", "age": 21}
]
在这个类中,我尝试获取json列表并打印它,但studentList是空的。
public class ReadJson implements Runnable {
public static List<Student> studentList;
@Override
public void run() {
try{
System.out.println("Reading thread is sleeping");
Thread.sleep(1000);
studentList = StudentListJson.getStudentList();
studentList.stream().forEach(x -> System.out.println(x.toString()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
学生类。
public class Student {
private String name;
private String surname;
private int age;
@Override
public String toString() {
return "Student{" +
"name='" + name + ''' +
", surname='" + surname + ''' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
getStudentList方法可以读取文件,并在该方法内,我可以打印所有列表,但当我尝试返回该列表,然后我尝试打印该列表在ReadJson类列表得到null。为什么?
这个代码返回null,这是我的问题。
studentList = StudentListJson.getStudentList();
您是否尝试将所需类型的列表元素包含到typerreference中?
new TypeReference<Student>() { }