Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
使用Jackson将JSON反序列化为Java_Java_Json_Deserialization_Pojo_Json Deserialization - Fatal编程技术网

使用Jackson将JSON反序列化为Java

使用Jackson将JSON反序列化为Java,java,json,deserialization,pojo,json-deserialization,Java,Json,Deserialization,Pojo,Json Deserialization,我第一次使用JSON,我正试图将JSON文件反序列化为Java对象 输入JSON { "student_id" : "123", "courses":[ { "course_id":"789", "professor":"abc" } ] } { "student_id":"234", courses:[ { "course_id":"789",

我第一次使用JSON,我正试图将JSON文件反序列化为Java对象

输入JSON

{

    "student_id" : "123",
     "courses":[
        {
         "course_id":"789",
         "professor":"abc"
        }
      ]
}
{
    "student_id":"234",
     courses:[
       {
         "course_id":"789",
         "professor":"pqr"
       },
       {
         "course_id":"789",
         "professor":"xyz"
       }
     ]
}
{
   "student_id" : "345",
     "courses":[
        {
         "course_id":"567",
         "professor":"lmn"
        }
      ]
}
学生。班级

class Student {

   @JsonProperty("student_id")
   private String studentId;
   @JsonProperty("courses")
   private List<Courses> courses;

   //getters and setters

}
public class Courses {

    @JsonProperty("course_id")
    private String courseId;
    @JsonProperty("professor")
    private String professor;

    //getters and setters
}
MyJsonHelper.class创建对象映射器类的对象,并使用readValue(新文件(“Input.json”)、Student.class)将json字段映射到Java对象

我想做的是创建一个地图,其中studentId是一个键,课程列表是每个studentId对应的值

我不知道如何实现它,因为我的列表只能得到1个元素,因此列表大小是1。还有创建地图的问题。
任何帮助都将不胜感激。

这个java类似乎是错误的。因为变量名与JSON对象不同

public class Courses {
    @JsonProperty("course_id")
    private String courseId;
    @JsonProperty("professor")
    private String professor;
    //getters and setters
}
就是这样,

class Student {
   @JsonProperty("student_id")
   private String student_id;
   @JsonProperty("courses")
   private List<Courses> courses;
   //getters and setters

    }
    public class Courses {
            @JsonProperty("course_id")
            private String course_id;
            @JsonProperty("professor")
            private String professor;
            //getters and setters
        }
班级学生{
@JsonProperty(“学生id”)
私人字符串学生id;
@JsonProperty(“课程”)
私人名单课程;
//接球手和接球手
}
公共课{
@JsonProperty(“课程id”)
私有字符串课程id;
@JsonProperty(“教授”)
私人弦乐教授;
//接球手和接球手
}

以下是使用ObjectMapper进行映射的一些方法:

ObjectMapper objectMapper = new ObjectMapper();
要分析单个学生对象,请执行以下操作:

Student student = objectMapper.readValue(inputJSONString, Student.class);
用于解析所需的学生对象列表:

List<Student> students = objectMapper.readValue(inputJSONString, objectMapper.getTypeFactory().constructCollectionType(List.class, Student.class));
List students=objectMapper.readValue(inputJSONString,objectMapper.getTypeFactory().constructionCollectionType(List.class,Student.class));
要分析地图,请执行以下操作:

Map<String, Courses> maps = objectMapper.readValue(inputJSONString, objectMapper.getTypeFactory().constructMapType(Map.class, String.class, Courses.class));
Map maps=objectMapper.readValue(inputJSONString,objectMapper.getTypeFactory().constructMapType(Map.class,String.class,Courses.class));

我认为变量名在这里不是问题,因为映射是通过注释完成的。我觉得我的语言在这个问题上有点模棱两可。所以我实际上想创建一个带有每个学生id的地图,所以只有一个学生对象。它有一个地图,其中键是学生ID,值是相应的课程列表。我刚刚更新了我的答案。对于特定情况,可以调整objectMapper.getTypeFactory().constructType的使用方式。。。有些可能适用,有些可能不适用。你需要为你的特定目的试一试。在我看来,列表解析就是这种情况下所需要的。