61

我需要将一些对象序列化为 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。所以如果有人可以帮忙请

4

7 回答 7

92

无需注释的简单方法是使用Gson 库

就那么简单:

Gson gson = new Gson();
String json = gson.toJson(listaDePontos);
于 2013-05-17T11:11:04.490 回答
11

也可以使用Jackson库。

添加 Maven 依赖:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId> 
  <artifactId>jackson-core</artifactId>
</dependency>

只需这样做:

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString( serializableObject );
于 2019-04-24T15:27:31.050 回答
9

我发现对 POJO 进行 Json 化的最快和最简单的方法是使用Gson 库这篇博客文章快速概述了使用该库。

于 2013-05-17T11:12:18.810 回答
5

你发出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;
于 2013-05-17T11:40:16.530 回答
3

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

https://github.com/ko5tik/jsonserializer

这是针对 POJO 的精简 GSON 库的小型包装器

于 2013-05-17T11:40:17.563 回答
1

Sean Leary 的“参考”Java 实现在 github 上。确保拥有最新版本 - 不同的库从 2009 年开始引入有缺陷的旧版本。

Java EE 7 中有一个 JSON API javax.json,请参阅Javadoc。据我所知,它没有将任何对象编组为 JSON 的简单方法,您需要构造 aJsonObject或 a 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 这样的其他库将有适配器来创建实现这些接口的对象。

于 2016-11-05T03:00:37.050 回答
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());
于 2017-11-09T05:27:47.813 回答