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
Der einfache Weg ohne Anmerkungen ist die Verwendung der Gson-Bibliothek
So einfach ist das:
Gson gson = new Gson();
String json = gson.toJson(listaDePontos);
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.
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;
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
Man kann auch die Jackson Bibliothek benutzen.
Mach einfach das:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString( serializableObject );
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.
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());