web-dev-qa-db-fra.com

Comment sérialiser Object to JSON?

Je dois sérialiser certains objets sur un JSON et les envoyer sur un WebService. Comment puis-je le faire en utilisant la bibliothèque org.json? Ou je vais devoir en utiliser un autre? Voici la classe dont j'ai besoin pour sérialiser:

public class PontosUsuario {

    public int idUsuario;
    public String nomeUsuario;
    public String CPF;
    public String email;
    public String sigla;
    public String senha;
    public String instituicao;

    public ArrayList<Ponto> listaDePontos;


    public PontosUsuario()
    {
        //criando a lista
        listaDePontos = new ArrayList<Ponto>();
    }

}

Je ne mets que les variables et le constructeur de la classe, mais il possède également les accesseurs et les setters. Donc, si quelqu'un peut aider s'il vous plaît

34
Tiago Geanezini

Un moyen facile de le faire sans annotations est d'utiliser bibliothèque Gson

Aussi simple que cela:

Gson gson = new Gson();
String json = gson.toJson(listaDePontos);
57
Bitman

Le moyen le plus rapide et le plus simple que j'ai trouvé pour les POJO Json-ify est d'utiliser la bibliothèque Gson . Cet article de blog donne un aperçu rapide de l’utilisation de la bibliothèque. 

6
ryanbateman

Vous faites la demande http

HttpResponse response = httpclient.execute(httpget);           
HttpEntity entity = response.getEntity();

inputStream = entity.getContent();

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();

Vous lisez le tampon

String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
Log.d("Result", sb.toString());
result = sb.toString();

Créez un JSONObject et transmettez la chaîne de résultat au constructeur:

JSONObject json = new JSONObject(result);

Analyser les résultats JSON à vos variables souhaitées:

String usuario= json.getString("usuario");
int idperon = json.getInt("idperson");
String nombre = json.getString("nombre");

N'oubliez pas d'importer:

import org.json.JSONObject;
4
Carlos Landeras

GSON est facile à utiliser et présente une empreinte mémoire relativement faible. Si vous voulez avoir une empreinte encore plus petite, vous pouvez récupérer: 

https://github.com/ko5tik/jsonserializer

Ce qui est minuscule pour encapsuler des bibliothèques GSON réduites pour juste des POJO

3

La "référence" de Java implémentée par Sean Leary est ici sur github . Assurez-vous d’avoir la dernière version - différentes bibliothèques récupèrent les versions avec des versions boguées d’anciennes versions de 2009.

Java EE 7 a une API JSON dans javax.json, voir le Javadoc . D'après ce que je peux dire, il n'a pas de méthode simple pour ordonner un objet à JSON, vous devez construire une JsonObject ou une JsonArray.

import javax.json.*;

JsonObject value = Json.createObjectBuilder()
 .add("firstName", "John")
 .add("lastName", "Smith")
 .add("age", 25)
 .add("address", Json.createObjectBuilder()
     .add("streetAddress", "21 2nd Street")
     .add("city", "New York")
     .add("state", "NY")
     .add("postalCode", "10021"))
 .add("phoneNumber", Json.createArrayBuilder()
     .add(Json.createObjectBuilder()
         .add("type", "home")
         .add("number", "212 555-1234"))
     .add(Json.createObjectBuilder()
         .add("type", "fax")
         .add("number", "646 555-4567")))
 .build();

JsonWriter jsonWriter = Json.createWriter(...);
jsonWriter.writeObject(value);
jsonWriter.close();

Mais je suppose que les autres bibliothèques comme GSON auront des adaptateurs pour créer des objets implémentant ces interfaces.

1
Ondra Žižka

Après la publication de JAVAEE8, vous pouvez maintenant utiliser la nouvelle API JAVAEE JSON-B ( JSR367 )

Dépendance Maven:

<dependency>
    <groupId>javax.json.bind</groupId>
    <artifactId>javax.json.bind-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>org.Eclipse</groupId>
    <artifactId>yasson</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1</version>
</dependency>

Voici un aperçu du code:

Jsonb jsonb = JsonbBuilder.create();
// Two important API : toJson fromJson
String result = jsonb.toJson(listaDePontos);

JSON-P est également mis à jour vers la version 1.1 et plus facile à utiliser. JSON-P 1.1 ( JSR374 )

Dépendance Maven:

<dependency>
    <groupId>javax.json</groupId>
    <artifactId>javax.json-api</artifactId>
    <version>1.1</version>
</dependency>

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1</version>
</dependency>

Voici le snapshot de code exécutable:

String data = "{\"name\":\"Json\","
                + "\"age\": 29,"
                + " \"phoneNumber\": [10000,12000],"
                + "\"address\": \"test\"}";
        JsonObject original = Json.createReader(new StringReader(data)).readObject();
        /**getValue*/
        JsonPointer pAge = Json.createPointer("/age");
        JsonValue v = pAge.getValue(original);
        System.out.println("age is " + v.toString());
        JsonPointer pPhone = Json.createPointer("/phoneNumber/1");
        System.out.println("phoneNumber 2 is " + pPhone.getValue(original).toString());
0
wodong