286 votes

Convertir des objets Java en JSON avec Jackson

Je veux que mon JSON ressemble à ça :

{
    "information": [{
        "timestamp": "xxxx",
        "feature": "xxxx",
        "ean": 1234,
        "data": "xxxx"
    }, {
        "timestamp": "yyy",
        "feature": "yyy",
        "ean": 12345,
        "data": "yyy"
    }]
}

Le code jusqu'ici :

import java.util.List;

public class ValueData {

    private List<ValueItems> information;

    public ValueData(){

    }

    public List<ValueItems> getInformation() {
        return information;
    }

    public void setInformation(List<ValueItems> information) {
        this.information = information;
    }

    @Override
    public String toString() {
        return String.format("{information:%s}", information);
    }

}

et

public class ValueItems {

    private String timestamp;
    private String feature;
    private int ean;
    private String data;

    public ValueItems(){

    }

    public ValueItems(String timestamp, String feature, int ean, String data){
        this.timestamp = timestamp;
        this.feature = feature;
        this.ean = ean;
        this.data = data;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    public String getFeature() {
        return feature;
    }

    public void setFeature(String feature) {
        this.feature = feature;
    }

    public int getEan() {
        return ean;
    }

    public void setEan(int ean) {
        this.ean = ean;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return String.format("{timestamp:%s,feature:%s,ean:%s,data:%s}", timestamp, feature, ean, data);
    }
}

Il me manque juste la partie où je peux convertir l'objet Java en JSON avec Jackson :

public static void main(String[] args) {
   // CONVERT THE JAVA OBJECT TO JSON HERE
    System.out.println(json);
}

Ma question est la suivante : mes classes sont-elles correctes ? Quelle instance dois-je appeler et comment puis-je obtenir cette sortie JSON ?

4 votes

Le tutoriel suivant pourrait vous aider : mkyong.com/java/how-to-convert-java-object-to-from-json-jackson

655voto

Jean Logeart Points 12166

Pour convertir votre object en JSON avec Jackson :

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.ObjectWriter; 

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

23 votes

La seule chose est que la chaîne sort échappée de l'ObjectWriter. Utilisez : new JSONObject(ow.writeValueAsString(msg)) si le message est envoyé via des services Web comme RESTful.

51voto

f10orf12 Points 646

Je sais que c'est vieux (et je suis nouveau en Java), mais j'ai rencontré le même problème. Et les réponses n'étaient pas aussi claires pour le débutant que je suis... alors j'ai pensé que je pourrais ajouter ce que j'ai appris.

J'ai utilisé une bibliothèque tierce pour m'aider dans cette tâche : org.codehaus.jackson Tous les téléchargements nécessaires peuvent être trouvés à l'adresse suivante ici .

Pour la fonctionnalité JSON de base, vous devez ajouter les jars suivants aux bibliothèques de votre projet : jackson-mapper-asl et jackson-core-asl

Choisissez la version dont votre projet a besoin. (En général, vous pouvez choisir la dernière version stable).

Une fois qu'ils sont importés dans les bibliothèques de votre projet, ajoutez ce qui suit import à votre code :

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;

Une fois que l'objet java a été défini et que des valeurs lui ont été attribuées, vous souhaitez les convertir en JSON et les renvoyer dans le cadre d'un service web RESTful.

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "sampleU@example.com";

ObjectMapper mapper = new ObjectMapper();

try {
    // convert user object to json string and return it 
    return mapper.writeValueAsString(u);
}
catch (JsonGenerationException | JsonMappingException  e) {
    // catch various errors
    e.printStackTrace();
}

Le résultat devrait ressembler à ceci : {"firstName":"Sample","lastName":"User","email":"sampleU@example.com"}

40voto

redavlr Points 7

Il suffit de suivre l'un d'entre eux :

  • Pour jackson cela devrait fonctionner :

          ObjectMapper mapper = new ObjectMapper();  
          return mapper.writeValueAsString(object);
          //will return json in string
  • Pour gson cela devrait fonctionner :

        Gson gson = new Gson();
        return Response.ok(gson.toJson(yourClass)).build();

2 votes

Qu'est-ce que Response.ok ?

1 votes

J'ai eu un problème avec les tailles JSON insérées dans mongoDB étaient au-dessus de la limite autorisée, quand j'active mon objet Gson a la taille plus grande qu'avec Jackson. Juste un conseil.

22 votes

La question porte sur jackson pas Gson

21voto

Tu pourrais faire ça :

String json = new ObjectMapper().writeValueAsString(yourObjectHere);

16voto

Vicky Points 2492

Cela pourrait être utile :

objectMapper.writeValue(new File("c:\\employee.json"), employee);

// display to console
Object json = objectMapper.readValue(
     objectMapper.writeValueAsString(employee), Object.class);

System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
     .writeValueAsString(json));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X