gpt4 book ai didi

java - 使用 jackson - @JsonPropertyOrder 进行 Json 到 POJO 解析,以下 Json 根据#students 有所不同?

转载 作者:行者123 更新时间:2023-12-01 12:26:33 29 4
gpt4 key购买 nike

这是我的 json 输入

{
"students_key": {
"student_key_one": {
"profile_root": "/profile/student_key_one/",
"nickname": "sam1",
"email": "sam1@gmail.com",
"studentkey": "student_key_one"
},
"student_key_two": {
"profile_root": "/profile/student_key_two/",
"nickname": "sam2",
"email": "sam2@gmail.com",
"studentkey": "student_key_two"
},
"student_key_three": {
"profile_root": "/profile/student_key_three/",
"nickname": "sam3",
"email": "sam3@gmail.com",
"studentkey": "student_key_three"
},
"student_key_four": {
"profile_root": "/profile/student_key_four/",
"nickname": "sam4",
"email": "sam4@gmail.com",
"studentkey": "student_key_four"
},
"student_key_five": {
"profile_root": "/profile/student_key_five/",
"nickname": "sam5",
"email": "sam5@gmail.com",
"studentkey": "student_key_five"
}
}
}

随着学生数量的增加,属性也会增加(student_key_one、student_key_two、student_key_third、student_key_four、student_key_ Five、student_key_six......)该属性将根据#students动态增加或减少。

由于这不是一个对象数组,我如何为 StudentsKey 创建 POJO?有人可以帮我用 jackson 编写用于反序列化的 pojo 吗?

最佳答案

分解:

外部包装器是一个对象,应该是它自己的类

+--------------------------+
| |
| { |
| "students_key": { |
| ... |
| } |
| } |
| |
+--------------------------+

{ } 大括号表示一个对象,在映射术语中表示一个类。并且该类只有一个属性 students_key。因此,我们可以创建一个类,例如 Students,具有一个字段 students_key

public class Students {
@JsonProperty("students_key")
(???????) students;
}

我们应该将 students_key 设置为什么类型?我们看一下结构

"students_key": {
"student_key_one": {
...
}
"student_key_two": {
...
}
...
}

我们应该问自己哪种数据结构最能支持键/值的概念。首先想到的是 map 。因此,如果我们将 students_key 设为 Map,则类型将为

 //       (key)          (value)
Map < String , Object >
// "student_key_one": { ... }

我们可以更进一步,为 Object 提供一个固定类型,因为我们有更多的属性。所以我们可以创建一个类 Student

public class Student {
@JsonProperty("profile_root")
private String profileRoot;
@JsonProperty("nickname")
private String nickname;
@JsonProperty("email")
private String email;
@JsonProperty("studentkey")
private String studentKey;
// GETTERS and SETTERS

@Override
public String toString() {
return "Student{" + "profileRoot=" + profileRoot + ", nickname="
+ nickname + ", email=" + email + ", studentKey=" + studentKey + '}';
}
}

所以最终的映射看起来像

public class Students {
@JsonProperty("students_key")
Map<String, Student> students;
}

当我们测试它时,它按预期工作

public class StudentsTest {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();

File file = new File("test.json");
Students students = mapper.readValue(file, Students.class);

for (Student s : students.getStudents().values()) {
System.out.println(s);
}
}
}

结果

Student{profileRoot=/profile/student_key_one/, nickname=sam1, email=sam1@gmail.com, studentKey=student_key_one}
Student{profileRoot=/profile/student_key_two/, nickname=sam2, email=sam2@gmail.com, studentKey=student_key_two}
Student{profileRoot=/profile/student_key_three/, nickname=sam3, email=sam3@gmail.com, studentKey=student_key_three}
Student{profileRoot=/profile/student_key_four/, nickname=sam4, email=sam4@gmail.com, studentKey=student_key_four}
Student{profileRoot=/profile/student_key_five/, nickname=sam5, email=sam5@gmail.com, studentKey=student_key_five}

关于java - 使用 jackson - @JsonPropertyOrder 进行 Json 到 POJO 解析,以下 Json 根据#students 有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26289189/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com