2017-08-21 3 views
1

Je le résultat suivant pour la requête select * from student where courseName = 'Science';Besoin de changer mon code pour générer correct 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) 

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

I voulez générer une chaîne JSON comme:

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

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

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

Au-dessus imprime le code 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}]}]} 

au lieu de

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

S'il vous plaît aidez-moi à écrire une bonne mise en œuvre code pour générer le bon JSON. (Note: Il est pas le code réel - juste un échantillon du code réel)

En bref: Je veux lire les entrées de la table de base de données et le rendre aussi:

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] 
       ] 
+1

quoi de neuf? ourse? quel est l'objet? –

+1

Pourquoi un étudiant a-t-il un nom de cours? –

+0

Le JSON n'est pas performant depuis la création d'une liste où un seul étudiant est dedans, n'est pas nécessaire. Le fichier JSON généré est plutôt bon. Vous pouvez bien sûr ajouter un identifiant avant l'étudiant. Modifiez votre 'Details'Object pour qu'il contienne également un ID ou créez un POJO' Wrapper' pour contenir ces valeurs. Pensez aussi aux doutes et aux questions de Maurice. Ils semblent douteux. – Nico

Répondre

1

d'abord Tout, dans votre JSON, vous devez utiliser des guillemets doubles (") pour que le json soit valide Enfin, vous devriez utiliser la bibliothèque Jackson 2.x.Ceci est un moyen plus simple de manipuler et de produire des données au format json. mise en oeuvre possible:

-----------------------------------com.example.Error.java------------------- 

package com.example; 

import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"error_code", 
"error_message" 
}) 
public class Error { 

@JsonProperty("error_code") 
public String errorCode; 
@JsonProperty("error_message") 
public String errorMessage; 

} 
-----------------------------------com.example.Example.java---------------- 

package com.example; 

import java.util.List; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"items" 
}) 
public class Example { 

@JsonProperty("items") 
public List<Item> items = null; 

} 
-----------------------------------com.example.Item.java-------------------- 
package com.example; 

import java.util.List; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"id", 
"students", 
"error" 
}) 
public class Item { 

@JsonProperty("id") 
public String id; 
@JsonProperty("students") 
public List<Student> students = null; 
@JsonProperty("error") 
public Error error; 

} 
-----------------------------------com.example.Student.java----------------- 

package com.example; 

import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"name", 
"points", 
"course_name", 
"course_id" 
}) 
public class Student { 

@JsonProperty("name") 
public String name; 
@JsonProperty("points") 
public Integer points; 
@JsonProperty("course_name") 
public String courseName; 
@JsonProperty("course_id") 
public Integer courseId; 

} 
+0

Le problème est quelque chose comme: Je dois obtenir un tableau -> 0ème index sera 2 entrées - ID, un tableau d'autres détails. – Futuregeek