web-dev-qa-db-de.com

Wie kann man Object zu JSON serialisieren?

Ich muss einige Objekte zu einem JSON serialisieren und an einen WebService senden. Wie kann ich dies mit der org.json-Bibliothek tun? Oder muss ich einen anderen verwenden? Hier ist die Klasse, die ich serialisieren muss:

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

}

Ich stelle nur die Variablen und den Konstruktor der Klasse ein, aber auch die Getter und Setter. Wenn also jemand helfen kann, bitte

34
Tiago Geanezini

Der einfache Weg ohne Anmerkungen ist die Verwendung der Gson-Bibliothek

So einfach ist das:

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

Der schnellste und einfachste Weg, den ich für Json-ify POJOs gefunden habe, ist die Verwendung der Gson Library . Dieser Blogbeitrag gibt einen schnellen Überblick über die Verwendung der Bibliothek. 

6
ryanbateman

Sie machen die http-Anfrage

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

Sie lesen den Puffer

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

Erstellen Sie ein JSONObject und übergeben Sie die Ergebniszeichenfolge an den Konstruktor:

JSONObject json = new JSONObject(result);

Analysieren Sie die Json-Ergebnisse in Ihre gewünschten Variablen:

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

Vergessen Sie nicht zu importieren:

import org.json.JSONObject;
4
Carlos Landeras

GSON ist einfach zu bedienen und hat einen relativ geringen Speicherbedarf. Wenn Sie noch weniger Fußabdruck haben, können Sie Folgendes ergreifen: 

https://github.com/ko5tik/jsonserializer

Das ist ein winziger Wrapper für GSON-Bibliotheken für POJOs

3

Man kann auch die Jackson Bibliothek benutzen.

Mach einfach das:

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString( serializableObject );
1
naspras

Die "Referenz" Java-Implementierung von Sean Leary ist hier auf github . Stellen Sie sicher, dass Sie über die neueste Version verfügen - verschiedene Bibliotheken ziehen fehlerhafte Versionen von 2009 ein.

Java EE 7 verfügt über eine JSON-API in javax.json, siehe Javadoc . Soweit ich das beurteilen kann, gibt es keine einfache Methode, um Objekte zu JSON zu Marshalling zu bringen. Sie müssen eine JsonObject oder eine JsonArray erstellen.

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

Ich gehe jedoch davon aus, dass die anderen Bibliotheken wie GSON Adapter haben, um Objekte zu erstellen, die diese Schnittstellen implementieren.

1
Ondra Žižka

Nach der Veröffentlichung von JAVAEE8 können Sie jetzt die neue JAVAEE-API JSON-B ( JSR367 )

Maven-Abhängigkeit:

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

Hier ist ein Code-Snapshot:

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

JSON-P wurde ebenfalls auf 1.1 aktualisiert und ist einfacher zu bedienen. JSON-P 1.1 ( JSR374 )

Maven-Abhängigkeit:

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

Hier ist der ausführbare Code-Snapshot:

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