Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想用下面给出的结构将JSON反序列化到给定的Java类中_Java_Json_Jackson - Fatal编程技术网

我想用下面给出的结构将JSON反序列化到给定的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

我试图使用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 = 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。

第一个代码片段是我所想的,但我不确定这是否起作用。第一个代码片段是我所想的,但我不确定这是否起作用。