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:

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

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 .

  • ¿Existe un límite de longitud de la clave (cadena) en el objeto JS?
  • Android Retrofit | Publicar objeto personalizado (enviar json al servidor)
  • Cómo analizar el análisis de json Usando GSON en android
  • Actualizar City Spinner con notifyDataSetChanged después de seleccionar estado
  • El inicio de sesión de Android con el objeto json está vacío en la búsqueda incluso si la ejecución de archivos php en el navegador Chrome está bien
  • Jackson deserializar con deserializador personalizado causa una gran cantidad de llamadas GC y toma mucho más tiempo
  • Envía una solicitud JSONArray POST con android volley library
  • Tipo Advertencia de seguridad con Iterator JSON
  • Concate JSONArray
  • Java: Vista previa de la solicitud HttpPost
  • AFNetworking para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.