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 .

  • Gson, cómo deserializar matriz o cadena vacía
  • La solicitud ajax de Aquery no parece comenzar en android
  • ¿Cuál es la mejor manera de tratar con el objeto JSON?
  • JSON publica en Rails desde Android
  • JSON Cadena devuelta desde el servicio web SOAP que no contiene registros para la tabla
  • Parse JSON sin sucesión de bloques Try-Catch
  • Error al analizar datos org.json.JSONException: El valor <br del tipo java.lang.String no se puede convertir en JSONObject
  • Java / Android: java.lang.OutOfMemoryError mientras se construye un objeto JSON
  • LoganSquare analiza en objeto o mapa genérico
  • ¿Hay una manera de sobrecargar JSONArray para comportarse como una lista regular en un bucle?
  • ¿Cuál es la forma estándar de publicar el objeto JSON junto con el archivo utilizando MultipartEntityBuilder y el cliente HTTP en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.