2017-08-22 6 views
1

Je le résultat suivant pour la requête select * from student where courseName = 'Science';Générer correcte JSON de Java Object - Jackson

Résultats:

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) 

Une partie du code de mise en œuvre ressemble actuellement:

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); 

Au-dessus de code affiche le mauvais JSON comme:

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

Mais je dois générer suivant JSON au lieu de ce qui précède celui-ci:

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

(Note: Il est pas le code réel - juste un échantillon du code)

+0

le code ci-dessus ne génère pas du tout JSON, ca n vous s'il vous plaît mettre à jour le poste avec votre code [i] réel [/ i]? Quelque chose doit générer ce JSON que vous avez là. En outre, tout ce qui se passe ici, c'est que vous obtenez vos résultats deux fois, cela ne devrait pas être un problème à résoudre et pourrait provenir de la façon dont vous acquérez ou sauvegardez vos données. Essayez de déboguer votre boucle (ou faites 'System.out.println (student.getName())' – Wep0n

+0

J'ai ajouté le code pour la génération JSON - il utilise le mappeur d'objet – Futuregeek

Répondre

0

Le problème ci-dessus a été résolu par initialiser la liste du tableau « étudiant » à l'intérieur de la boucle:

le code a changé comme:

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); 
+0

Est-ce que cela a fonctionné? Votre compilateur ne s'est pas plaint du fait que vous avez nommé 2 variables "étudiant"? – Wep0n

+0

le code réel est différent. – Futuregeek