如何序列化对象到JSON?

我需要序列化一些对象到JSON并发送到WebService。 我怎样才能使用org.json库呢? 或者我将不得不使用另一个? 这是我需要序列化的类:

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

我只把类的variables和构造函数,但它也有getters和setter。 所以如果有人可以帮忙请

Solutions Collecting From Web of "如何序列化对象到JSON?"

简单的方法来做没有注释是使用Gson库

就那么简单:

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

我发现Json-ify POJO最快最简单的方法就是使用Gson库 。 这篇博文简要介绍了如何使用这个库。

你提出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(); 

你读缓冲区

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

创build一个JSONObject并将结果string传递给构造函数:

 JSONObject json = new JSONObject(result); 

parsingjson结果到你想要的variables:

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

不要忘记导入:

 import org.json.JSONObject; 

GSON易于使用,内存占用相对较小。 如果你喜欢有更小的占地面积,你可以抓住:

https://github.com/ko5tik/jsonserializer

这是微小的包装剥离GSON库只是POJO

Sean Leary的“参考”Java实现在github上 。 确保拥有最新版本 – 不同的库从2009年开始提供buggy旧版本。

Java EE 7在javax.json有一个JSON API,请参阅Javadoc 。 从我可以告诉,它没有一个简单的方法来编组任何对象到JSON,你需要构造一个JsonObject或一个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(); 

但是我认为像GSON这样的其他库会有适配器来创build实现这些接口的对象。

在JAVAEE8发布后,现在可以使用新的JAVAEE API JSON-B ( JSR367 )

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> 

这是一些代码快照:

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

JSON-P也更新到1.1,更易于使用。 JSON-P 1.1 ( JSR374 )

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> 

以下是可运行的代码快照:

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