squareup parser library android gson deserialization moshi

parser - Moshi vs Gson en Android



json parser android library (2)

Moshi usa Okio para optimizar algunas cosas que Gson no hace.

  • Al leer los nombres de los campos , Moshi no tiene que asignar cadenas ni realizar búsquedas hash.
  • Moshi escanea la entrada como una secuencia de bytes UTF-8, convirtiéndola en caracteres Java perezosamente. Por ejemplo, nunca necesita convertir literales enteros en caracteres.

Los beneficios de estas optimizaciones son particularmente pronunciados si ya está utilizando transmisiones Okio. Los usuarios de Retrofit y OkHttp en particular se benefician de Moshi.

Más discusión sobre los orígenes de Moshi están en mi publicación, Moshi, otro procesador JSON .

Estoy decidiendo si usar Moshi por cuadrado o Gson para serializar y deserializar los datos del modelo.

Una cosa que siempre me gustó de Gson es que creo que utiliza la reflexión que puede ser lenta en Android. ¿Moshi también usa la reflexión?

¿Cuáles son algunos de los pros y los contras de moshi vs Gson?

Los veo como similares. Tomemos por ejemplo esta declaración que crea un typeAdapter:

class CardAdapter { @ToJson String toJson(Card card) { return card.rank + card.suit.name().substring(0, 1); } @FromJson Card fromJson(String card) { if (card.length() != 2) throw new JsonDataException("Unknown card: " + card); char rank = card.charAt(0); switch (card.charAt(1)) { case ''C'': return new Card(rank, Suit.CLUBS); case ''D'': return new Card(rank, Suit.DIAMONDS); case ''H'': return new Card(rank, Suit.HEARTS); case ''S'': return new Card(rank, Suit.SPADES); default: throw new JsonDataException("unknown suit: " + card); } } }

y para usarlo regístralo como en gson:

Moshi moshi = new Moshi.Builder() .add(new CardAdapter()) .build();

Supongo que las ventajas serían la anotación que se utiliza en el tipo Adaptador. Estoy buscando saber si hay algún aumento de rendimiento si me cambio a Moshi.


Según el comentario de swankjesse en reddit :

Estoy orgulloso de mi trabajo en Gson, pero también decepcionado por algunas de sus limitaciones. Quería abordar estos, pero no como "Gson 3.0", en parte porque ya no trabajo en Google. Jake, Scott, Eric y yo creamos Moshi para abordar las diversas limitaciones de Gson. Aquí hay diez pequeñas razones para preferir Moshi sobre Gson:

  1. Próximo soporte de Kotlin.

  2. Los calificadores como @HexColor int permiten múltiples representaciones JSON para un solo tipo Java.

  3. @ToJson y @FromJson facilitan la escritura y prueba de adaptadores JSON personalizados.

  4. JsonAdapter.failOnUnknown () le permite rechazar datos JSON inesperados.

  5. Excepciones predecibles. Moshi lanza IOException en problemas de IO y JsonDataException en desajustes de tipo. Gson está por todos lados.

  6. JsonReader.selectName () evita decodificaciones UTF-8 innecesarias y asignaciones de cadenas en el caso común.

  7. Enviarás un APK más pequeño. Gson es 227 KiB, Moshi + Okio juntos son 200 KiB.

  8. Moshi no filtrará detalles de implementación de tipos de plataforma en su JSON codificado. Esto me da miedo de Gson: gson.toJson (SimpleTimeZone.getTimeZone ("GMT"))

  9. Moshi no hace escapes HTML extraños por defecto. Mire la codificación predeterminada de Gson de "12 & 5 = 4" para ver un ejemplo.

  10. No hay un adaptador de fecha roto instalado de forma predeterminada.

Si está escribiendo un nuevo código, le recomiendo comenzar con Moshi. Si tiene un proyecto existente con Gson, debe actualizar si eso será simple y no arriesgado. De lo contrario, quédate con Gson! Estoy haciendo todo lo posible para asegurarme de que siga siendo compatible y confiable.