我想用下面给出的结构将JSON反序列化到给定的Java类中
我试图使用Jackson将给定的JSON格式读入Student类,该类包含另一个类Details.java的一组对象我想用下面给出的结构将JSON反序列化到给定的Java类中,java,json,jackson,Java,Json,Jackson,我试图使用Jackson将给定的JSON格式读入Student类,该类包含另一个类Details.java的一组对象 public class Details { private String detail1; private String detail2; public Details(String detail1, String detail2){ this.detail1 = detail1; this.detail2 = det
public class Details {
private String detail1;
private String detail2;
public Details(String detail1, String detail2){
this.detail1 = detail1;
this.detail2 = detail2;
}
}
如何进行此解析
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
Student student = = new ObjectMapper().readValue(JSON_INPUT, Student.class);
JSON
Student.java
public class Student {
private String studentName;
private int studentID;
private Set<Details> details;
public Student(String studentName, Integer studentID, Set<Details> details){
this.studentName = studentName;
this.studentID = studentID;
this.details = details;
}
}
如果它是一个选项,我会使用库。它使用反射,因此不需要设置器来填充数据。它也不会使用这个构造函数 使用该库,您只需在一行中进行反序列化,正如您之前定义的
Student
和Details
类中的属性匹配:
Student studentObject = new Gson().fromJson(JSON_INPUT, Student.class);
然后需要添加一些getter来获取studentObject的数据
更新
我想我也发现了你使用的Jackson ObjectMapper的问题所在。根据Jackson的工作原理不同,如果字段是非公共的,比如那些字段,那么您必须定义setter或getter,库将使用它们
setter使非公共字段只能反序列化,而getter使非公共字段可以序列化和反序列化
所以,如果您仍然喜欢使用jackson,或者它不起作用,您需要为studentName、studentID、details、detail1和detail2添加setter或getter。如果这是一个选项,我将使用library。它使用反射,因此不需要设置器来填充数据。它也不会使用这个构造函数 使用该库,您只需在一行中进行反序列化,正如您之前定义的
Student
和Details
类中的属性匹配:
Student studentObject = new Gson().fromJson(JSON_INPUT, Student.class);
然后需要添加一些getter来获取studentObject的数据
更新
我想我也发现了你使用的Jackson ObjectMapper的问题所在。根据Jackson的工作原理不同,如果字段是非公共的,比如那些字段,那么您必须定义setter或getter,库将使用它们
setter使非公共字段只能反序列化,而getter使非公共字段可以序列化和反序列化
因此,如果您仍然喜欢使用jackson,或者它不起作用,那么您需要为studentName、studentID、details、detail1和detail2添加setter或getter。第一个代码片段是我所想的,但我不确定这是否起作用。第一个代码片段是我所想的,但我不确定这是否起作用。