Conversion d'objets Java en JSON avec Jackson


166

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'à présent:

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 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?



Merci qui m'a aidé :)
JustTheAverageGirl

si l'entité a rejoint d'autres tables, suivez cette méthode. /programming/19928151/convert-entity-object-to-json/45695714#45695714
Sedat A

Réponses:


417

Pour convertir votre objecten JSON avec Jackson:

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

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

Par manque d'intérêt, pourquoi n'est-ce pas os.writeValueAsJSONString (object)?
DevilCode

3
Je suis confronté à cette erreur, comment résoudre avec votre code Aucun sérialiseur trouvé pour la classe com.liveprocessor.LPClient.LPTransaction et aucune propriété découverte pour créer BeanSerializer (pour éviter les exceptions, désactivez SerializationFeature.FAIL_ON_EMPTY_BEANS))

11
bibliothèques d'ailleurs: import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter;
diego matos - keke

objectDOIT avoir des getters pour tous les champs, que vous voulez inclure dans votre JSON.
Drakonoved le

25

Je sais que c'est vieux (et je suis nouveau sur 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é que j'ajouterais ce que j'avais appris.

J'ai utilisé une bibliothèque tierce pour m'aider dans cette entreprise: org.codehaus.jackson tous les téléchargements pour cela peuvent être trouvés ici .

Pour la fonctionnalité 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 sont importés dans les bibliothèques de votre projet, ajoutez les importlignes 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 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"}


Je crois que les lignes "import" ont changé en "import com.fasterxml.jackson.databind.ObjectMapper;"
barrypicker

16

Cela peut ê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));

10

fais juste ça

 for jackson it's
         ObjectMapper mapper = new ObjectMapper();  
         return mapper.writeValueAsString(object);
         //will return json in string


 for gson it's:
            Gson gson = new Gson();
            return Response.ok(gson.toJson(yourClass)).build();

Qu'est-ce que Response.ok?
Codeversé le

J'ai eu un problème avec les tailles JSON insérées dans mongoDB étaient supérieures à la limite autorisée, lorsque j'allume mon objet Gson a la plus grande taille qu'avec Jackson. Juste un conseil.
Daniela Morais

14
La question est sur jackson, pasGson
Ean V

2
@Codeversed Response est une classe de la bibliothèque Jersey. Response.ok renverra une réponse JSON avec le code d'état 200.
Pranav


2

Eh bien, même la réponse acceptée ne donne pas exactement ce que l'op a demandé. Il génère la chaîne JSON mais avec des "caractères échappés. Donc, même si c'est peut-ê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

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

Par défaut, Jackson 2 ne fonctionnera qu'avec des champs qui sont publics ou qui ont une méthode getter publique - la sérialisation d'une entité qui a tous les champs private ou package private échouera.

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


0
public class JSONConvector {

    public static String toJSON(Object object) throws JSONException, IllegalAccessException {
        String str = "";
        Class c = object.getClass();
        JSONObject jsonObject = new JSONObject();
        for (Field field : c.getDeclaredFields()) {
            field.setAccessible(true);
            String name = field.getName();
            String value = String.valueOf(field.get(object));
            jsonObject.put(name, value);
        }
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }


    public static String toJSON(List list ) throws JSONException, IllegalAccessException {
        JSONArray jsonArray = new JSONArray();
        for (Object i : list) {
            String jstr = toJSON(i);
            JSONObject jsonObject = new JSONObject(jstr);
            jsonArray.put(jsonArray);
        }
        return jsonArray.toString();
    }
}

Trop de travail, trop de réflexion! Les cartographes sont censés vous libérer de ces trucs passe-partout!
Ean V

3
J'adore les convecteurs!
Christos

0

Vous pouvez utiliser Google Gson comme ça

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

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.