有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从Java对象生成正确的JSON

我有以下查询结果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)

部分实现代码当前看起来像:

List<StudentDetails> studentDetailss = StudentDetailsRepository
    .findByCourseId(Request.getCourseId());
List<Student> student = new ArrayList<>();
List<Item> studentList = new ArrayList<>();
Response response = new Response();

for (StudentDetails student : studentDetailss) {
  IndividualItem studentItem = new IndividualItem();
  studentItem.setId(student.getId());

  Offer offer = new Offer();
  offer.setName(studentDetailss.getName());
  offer.setTotalPoints(studentDetailss.getPoints());
  offer.setCourseName(studentDetailss.getCourseName());
  offer.setCourseId(studentDetailss.getCourseId());

  Student.add(offer);
  studentItem.setOfferList(Student);
  studentList.add(studentItem);
  Response.setItems(studentList);
    }

json_text = mapper.writeValueAsString(Response);

上面的代码打印错误的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}]},{"id":"1108","details":[{"name":"Matt", "points":3000,"course_name":"Science","course_id":10},{"name": "Charley",points":12348,"course_name":"Science","course_id":20}]}]}

但我需要生成以下JSON,而不是上面的JSON:

 {"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}]}]} 

(注意:它不是真正的代码-只是代码的一个示例)


共 (1) 个答案

  1. # 1 楼答案

    通过在for循环中初始化数组列表“student”,解决了上述问题:

    代码更改如下:

    List<StudentDetails> studentDetailss = StudentDetailsRepository
        .findByCourseId(Request.getCourseId());
    List<Item> studentList = new ArrayList<>();
    Response response = new Response();
    
    for (StudentDetails student : studentDetailss) {
      IndividualItem studentItem = new IndividualItem();
      studentItem.setId(student.getId());
    
      Offer offer = new Offer();
      offer.setName(studentDetailss.getName());
      offer.setTotalPoints(studentDetailss.getPoints());
      offer.setCourseName(studentDetailss.getCourseName());
      offer.setCourseId(studentDetailss.getCourseId());
    
      Student.add(offer);
      studentItem.setOfferList(Student);
      studentList.add(studentItem);
      Response.setItems(studentList);
        }
    
    json_text = mapper.writeValueAsString(Response);