使用Jackson将JSON反序列化为Java
我第一次使用JSON,我正试图将JSON文件反序列化为Java对象 输入JSON使用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",
{
"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的使用方式。。。有些可能适用,有些可能不适用。你需要为你的特定目的试一试。在我看来,列表解析就是这种情况下所需要的。