java - 从 Java 对象生成正确的 JSON - Jackson

标签 java json jackson iteration

我的查询结果如下 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}]}]} 

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

最佳答案

通过在 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);

关于java - 从 Java 对象生成正确的 JSON - Jackson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45817057/

相关文章:

java - 注册了多个 UserDetailsS​​ervice。请在 <remember-me/> <openid-login/> 或 <x509/> 元素中使用特定的 Id 引用

java - @Test(expected = Exception.class) 或 Assertions.assertThrows(...) 或assertThatThrownBy(..) 推荐哪一个?

java - 替代已弃用的方法 ObjectMapper.reader(Class)

java - Jackson - 反序列化嵌套的 JSON

java - 注释或不注释

java - 使用 MOXy 整理嵌套数组

sql - 从 SQL Server 中以字典(字符串索引列表)表示法输出 json

java - 如何将 Json 数组转换为 Java 对象数组

java - 将 JSON 列表转换为 POJO

java - 使用 Jackson 的 JSON 数据特殊字段