Cómo configurar gson para excluir 0 valores enteros
I hava una clase java con una gran cantidad de campos enteros y cuando quiero serializar esta clase a json algunos de ellos no podría tener ningún valor. Así que después de serializar tengo json con 0 enteros valorados! Quiero configurar gson no serializarlos.
Por ejemplo tengo esta clase:
- ¿Eliminar y editar elementos de la lista en android?
- Cómo hacer un servicio web (preferiblemente usando PHP) que puede ser solicitado para obtener objetos JSON por la aplicación android
- Cómo obtener una respuesta JSON grande en Android Sybase Unwired Platform
- Múltiples elementos seleccionados RecyclerView in Activity.java
- Extraer el cuerpo del mensaje de HttpResponse
class Example { String title = "something"; int id = 22; int userId; }
Por defecto gson me da este resultado:
{ "title" : "something", "id" : 22, "userId" : 0 }
Pero no quiero que el userId se serialice cuando su valor es 0. Así que el json debe ser:
{ "title" : "something", "id" : 22 }
Para objetos por defecto gson no serializa objetos nulos hay una manera de configurar gson no serializar números 0
- Diseño como la aplicación HotStar
- Permiten a los usuarios crear formularios dentro de la aplicación android survey / data collection
- Proguard mantener a los miembros de la clase
- Introduce datos en la base de datos desde la aplicación de Android a través del servicio web.
- JsonMappingException: No se encontró ningún constructor adecuado
- cómo guardar datos de json en sqlite en android
- Cómo construir un servidor de notificación push de Android en PHP
- Asignación de un JSONObject a una lista con Flexjson en Java / Android
Tenemos que usar la clase Integer.
class Example { String title = "something"; Integer id = 22; Integer userId; }
Puede escribir un Custom TypeAdapter
.
public class ExampleTypeAdapter extends TypeAdapter<Example> { @Override public Example read(com.google.gson.stream.JsonReader in) throws IOException { final Example example = new Example(); in.beginObject(); while (in.hasNext()) { String name = in.nextName(); if ("title".equals(name)) { example.title = in.nextString(); } else if ("id".equals(name)) { example.id = in.nextInt(); } else if ("userId".equals(name)) { example.userId = in.nextInt(); } } in.endObject(); return example; } @Override public void write(com.google.gson.stream.JsonWriter out, Example example) throws IOException { out.beginObject(); out.name("title").value(example.title); if(example.id != 0) { out.name("id").value(example.id); } if(example.userId != 0) { out.name("userId").value(example.userId); } out.endObject(); } }
Pruébalo con el siguiente código:
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Example.class, new ExampleTypeAdapter()); gsonBuilder.setPrettyPrinting(); Gson gson = gsonBuilder.create(); Example example = new Example(); example.title = "mytitle"; example.id = 1234; example.userId = 0; final String json = gson.toJson(example); System.out.println(json);
El resultado será:
{ "title": "my title", "id": 1234 }
Nota: La parte importante está en el método de write
de nuestro Custom TypeAdapter
.
- Cambiar dinámicamente el fondo LinearLayout
- Encontrar puntos contenidos en una ruta de acceso en Android