web-dev-qa-db-fra.com

Comment convertir un JSONObject en une classe Java Java personnalisée?

Dans Java ( en utilisant json-simple ) j'ai réussi à analyser une chaîne JSON qui a été créée en JavaScript en utilisant JSON.stringify. Cela ressemble à ceci:

{"teq":14567,"ver":1,"rev":1234,"cop":15678}

Cette chaîne stocke l'état d'un objet JavaScript personnalisé que je souhaite maintenant reconstituer en tant que classe Java pure. Cela ne va pas bien - première incursion dans Java provenant d'un arrière-plan C #. :-p

L'objet est actuellement sous la forme d'un org.json.simple.JSONObject car c'est ce que json-simple a fait à partir de l'opération JSONParser.parse ().

Comment puis-je convertir ce JSONObject dans ma nouvelle classe Java? (dont la définition est ci-dessous ...)

public class MyCustomJSObject {
    public int teq;
    public int ver;
    public int rev;
    public int cop;
}
16
Geek Stocks

utiliser la bibliothèque jackson

    //create ObjectMapper instance
    ObjectMapper objectMapper = new ObjectMapper();

    //convert json string to object
    Employee emp = objectMapper.readValue(jsonData, Employee.class); 
17
arsen_adzhiametov

Ajouter une dépendance de https://github.com/google/gson et l'utiliser comme

Gson gson= new Gson();
CustomPOJOClass obj = gson.fromJson(jsonObject.toString(),CustomPOJOClass.class);
13
Milon

Il y a beaucoup de bibliothèques qui font ça. Voici ma suggestion. Ici vous pouvez trouver la bibliothèque

import com.google.gson.Gson; 

puis faites,

Gson gson = new Gson();  
Student student = gson.fromJson(jsonStringGoesHere, Student.class);  

Dépendance Maven

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>
4
diyoda_

Chaîne JSON à Java Class? Vous pouvez essayer fastjson:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.1.41</version>
</dependency>

et en utilisant Java code:

MyCustomJSObject object = JSON.parseObject(jsonString,MyCustomJSObject.class); 
3
Vito

MISE À JOUR 1/9/2018

Quelques années se sont écoulées depuis que cette question (devenue populaire) a été posée. Bien que je convienne encore que json-simple était mon besoin à l'époque, après réflexion, je pense que la communauté SO est mieux servie en ayant la "coche" à côté de la solution Jackson. Je ne suis pas- accepter ma propre réponse aujourd'hui, Jackson est plutôt génial!


Je pense que cette bibliothèque json-simple décente est victime d'une mauvaise documentation. Si vous n'utilisez pas le JSONParser (allez comprendre!) Mais utilisez plutôt cette méthode JSONValue.parse (), tout fonctionne comme ceci:

    //JSONParser parser = new JSONParser(); // DON'T USE THIS
    Object obj = JSONValue.parse("A JSON string - array of objects: [{},{}] - goes here");
    JSONArray arrFilings = (JSONArray)obj;
    System.out.println("We can print one this way...");
    System.out.println(arrFilings.get(5) + "\n");

    System.out.println("We can enumerate the whole array...");
    for(Object objFiling : arrFilings){
        System.out.println(objFiling);
    }
    System.out.println("\n");

    System.out.println("We can access object properties this way...");
    for(Object objFiling : arrFilings){
        JSONObject o = (JSONObject)objFiling; // MUST cast to access .get()
        MyJSObject.fyq = o.get("fyq");
    }
    System.out.println("\n");

Merci à tous ceux qui ont posté. Rester avec json-simple était la question et c'est la seule réponse json-simple à ce jour. Jackson a l'air lisse, et Amazon l'utilise dans leur SDK pour Java aussi, sooo .... si c'est assez bon pour AWS ....

2
Geek Stocks