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:
- Envío de los datos al servidor a través del correo cuando la conexión a Internet vuelve
- ¿Cómo enviar algunos datos adicionales al enviar notificaciones push usando OneSignal?
- Cómo analizar este tipo de json String con Gson?
- Convertir Facebook JSON created_time de formato String a formato largo
- Restaurar el orden en el que se colocan los datos en un JSONObject
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
- Desarrollar sitios web con la misma API que los móviles
- Retrofit 2: enviar archivos con el objeto json
- Analizar datos JSON utilizando JSONReader o JSONObject / JSONArray
- Obtención de imagen de la matriz de bytes en el objeto JSON a la aplicación de Android
- Citas de relleno en JSONObject
- "Text1 / Text2" La cadena se reemplaza por "Text1 \ / Text2" en android
- Cómo publicar el progreso para el análisis de archivos json de gran tamaño con GSON
- ¿Cuál es el propósito básico de la anotación @SerializedName en android usando GSon
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