【发布时间】:2017-08-21 12:38:35
【问题描述】:
我有以下查询select * from student where courseName = 'Science';的结果
结果:
student_id | name | points | course_name | course_id |
+----------+--------+--------+---------------+-----------+
1107| Matt | 3000 | Science | 10 |
| 1108| Charley| 12348 | Science | 20 |
2 rows in set, 2 warnings (0.00 sec)
StudentsDetails.java:
@Entity(name = "com.StudentDetails")
public class StudentDetails extends AbstractPersistable<Long> {
private long studentId;
private String name;
private long points;
private String courseName;
private long courseId;
public StudentDetails(long studentId, String name, long points, String courseName, long courseId) {
this.studentId = studentId;
this.name = name;
this.points = points;
this.courseName = courseName;
this.courseId = courseId;
}
public long getStudentId() {
return studentId;
}
public String getName() {
return name;
}
public long getPoints() {
return points;
}
public String getCourseName() {
return courseName;
}
public long getCourseId() {
return courseId;
}
}
我想生成一个 JSON 字符串,例如:
{
"items": [
{
"id": "123",
"students": [
{
"name": 'Matt',
"points": 3000,
"course_name": 'Science',
"course_id": 10
}
]
},
{
"id": "324",
"students": [
{
"name": 'Charley',
"points": 12348,
"course_name": Science,
"course_id": 20
}
]
},
{
"id": "898",
"error": {
"error_code": "500",
"error_message": "Details not found"
}
}
]
}
部分实现代码目前如下所示:
for (int i = 0; i < studentDetails.size(); i++) {
Details details = new Details();
details.setName(studentDetails.get(i).getName());
details.setPoints(studentDetails.get(i).getPoints());
details.setCourseName(studentDetails.get(i).getCourseName());
details.setCourseId(studentDetails.get(i).getCourseId());
Listdetails.add(details);
item.setListDetails(Listdetails);
}
response = mapper.writeValueAsString(item);
上面的代码会打印错误的 JSON,例如:
{"items":[{"id":"1107","details":[{"name": "Matt","points":3000,"course_name":"Science,"course_id":10},{"name":"Charley","points":12348,"course_name":"Science","course_id":20}]}]}
而不是
{"items":[{"id":"1107","details":[{"name": "Matt","points":3000,"course_name":"Science,"course_id":10}]},{"id":"1108","details":[{"name":"Charley","points":12348,"course_name":"Science","course_id":20}]}
请帮我写一个好的实现代码来生成正确的 JSON。 (注意:这不是真正的代码 - 只是真实代码的一个示例)
简而言之:我想从数据库表中读取条目并将其设置为:
items array -> [
0th index : student_id, other related details (1107,['Matt',3000,'Science',10]
1st index : student_id, other related details(1108,['Charley',12348,'Science',20]
]
【问题讨论】:
-
什么是详细信息?一门课程?什么是物品?
-
为什么学生有课程名称?
-
JSON 性能不佳,因为创建列表时只有一个学生在其中,因此不需要。生成的 JSON 基本上是相当不错的。您当然可以在学生之前添加一个 ID。要么改变你的
DetailsObject 来保存一个ID,要么创建一个WrapperPOJO 来保存这些值。还要想想莫里斯的疑惑和问题。他们似乎很可疑。 -
你的表
student好像没有规范化 -
它不是真正的代码,但工作方式相同。我只是简单地给出了课程名称而不是我的真实代码
标签: java json jackson jackson-databind