web-dev-qa-db-fra.com

Conversion d'objets Java en JSON avec Jackson

Je veux que mon JSON ressemble à ceci:

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

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

Je manque juste la partie comment 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 cours sont-ils corrects? Quelle instance dois-je appeler et comment puis-je obtenir cette sortie JSON?

126

Pour convertir votre object en JSON avec Jackson:

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

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

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

J'ai utilisé une bibliothèque tierce pour faciliter cette tâche: org.codehaus.jackson Tous les téléchargements à cette fin peuvent être trouvés ici .

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

Choisissez la version dont votre projet a besoin. (En règle générale, vous pouvez utiliser la dernière version stable). 

Une fois qu'ils ont été importés dans les bibliothèques de votre projet, ajoutez les lignes import suivantes à votre code:

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;

Avec l'objet Java défini et les valeurs attribuées que vous souhaitez convertir en JSON et renvoyer en tant que partie d'un service Web RESTful

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "[email protected]";

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":"[email protected]"}

15
f10orf12

fais juste ça

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

Bien, même la réponse acceptée ne pas exactement ce que l’opérateur a demandé. Il génère la chaîne JSON mais avec les caractères " échappés. Donc, bien que cela puisse être un peu tard, je réponds en espérant que cela aidera les gens! Voici comment je le fais:

StringWriter writer = new StringWriter();
JsonGenerator jgen = new JsonFactory().createGenerator(writer);
jgen.setCodec(new ObjectMapper());
jgen.writeObject(object);
jgen.close();
System.out.println(writer.toString());
2
Ean V

Remarque: pour que la solution la plus votée fonctionne, les attributs dans le POJO doivent être public ou avoir un public getter/setter:

Par défaut, Jackson 2 ne fonctionnera qu'avec des champs qui sont soit public, ou avoir un public getter méthodes - sérialiser une entité qui a tous les champs privés ou le paquet privé échouera.

Pas encore testé, mais je pense que cette règle s'applique également à d'autres bibliothèques Json comme Google Gson.

1
ZhaoGang

Vous pouvez utiliser Google Gson comme ceci

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
0
Ven Ren

Vous pourriez faire ceci:

String json = new ObjectMapper().writeValueAsString(yourObjectHere);
0
Clayton K. N. Passos