我需要将一些对象序列化为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>();
}
}
我只放了类的变量和构造函数,但它也有getter和setter。所以,如果有人可以提供帮助,请
答案 0 :(得分:61)
答案 1 :(得分:7)
我发现Json-ify POJO的最快捷最简单的方法是使用Gson library。 This blog post简要概述了使用该库。
答案 2 :(得分:4)
您发出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();
创建 JSONObject 并将结果字符串传递给构造函数:
JSONObject json = new JSONObject(result);
将json结果解析为您想要的变量:
String usuario= json.getString("usuario");
int idperon = json.getInt("idperson");
String nombre = json.getString("nombre");
不要忘记导入:
import org.json.JSONObject;
答案 3 :(得分:3)
GSON易于使用且占用内存相对较小。如果你喜欢占用更小的空间,你可以抓住:
https://github.com/ko5tik/jsonserializer
对于只有POJO的精简GSON库而言,这是一个微小的包装
答案 4 :(得分:1)
Sean Leary的“参考”Java实现是here on github。确保拥有最新版本 - 不同的库从2009年开始提供旧版本的版本。
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这样的其他库将有适配器来创建实现这些接口的对象。
答案 5 :(得分:1)
一个人也可以使用Jackson库。
只需执行以下操作:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString( serializableObject );
答案 6 :(得分:0)
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());