it-roy-ru.com

Как сериализовать объект в 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>();
    }

}

Я только помещаю переменные и конструктор класса, но у него также есть геттеры и сеттеры. Так что если кто-то может помочь, пожалуйста

34
Tiago Geanezini

Простой способ сделать это без аннотаций - использовать библиотека Gson

Просто как тот:

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

Самый быстрый и простой способ, который я нашел для Json-ify POJO - это использовать библиотеку Gson . Этот пост в блоге дает краткий обзор использования библиотеки. 

6
ryanbateman

Вы делаете запрос 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;
4
Carlos Landeras

GSON прост в использовании и имеет относительно небольшой объем памяти. Если вам нравится иметь еще меньшую площадь, вы можете взять: 

https://github.com/ko5tik/jsonserializer

Крошечная обертка вокруг урезанных библиотек GSON только для POJO

3
Konstantin Pribluda

Реализованная Java-реализация Шона Лири - это здесь, на github . Убедитесь, что у вас последняя версия - разные библиотеки вытягивают версии с ошибками старых версий 2009 года.

Java EE 7 имеет JSON API в javax.json, см. 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, будут иметь адаптеры для создания объектов, реализующих эти интерфейсы.

1
Ondra Žižka

После публикации JAVAEE8 теперь вы можете использовать новый API JAVAEE 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());
0
wodong