Je décide d’utiliser Moshi par carré ou Gson pour sérialiser et désérialiser les données du modèle.
une chose que je n’ai toujours pas aimée chez Gson est que je pense qu’elle utilise la réflexion qui peut être lente sur Android? Moshi utilise-t-il également la réflexion?
Quels sont certains des avantages et des inconvénients de Moshi vs Gson?
Je les vois comme similaires. Prenons par exemple cette instruction qui crée 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);
}
}
}
et pour l'utiliser, enregistrez-le comme dans gson:
Moshi moshi = new Moshi.Builder()
.add(new CardAdapter())
.build();
je suppose que les avantages seraient les annotations utilisées dans le typeAdapter. Je cherche à savoir s’il ya des gains de performance si je passe à Moshi.
Moshi utilise Okio pour optimiser certaines choses que Gson n’a pas.
Les avantages de ces optimisations sont particulièrement prononcés si vous utilisez déjà des flux Okio. Les utilisateurs de Retrofit et OkHttp bénéficient en particulier de Moshi.
Vous trouverez plus de détails sur les origines de Moshi dans mon message, Moshi, un autre processeur JSON .
D'après le commentaire de swankjesse sur reddit :
Je suis fier de mon travail sur Gson, mais aussi déçu par certaines de ses limites. Je voulais aborder ces questions, mais pas en tant que "Gson 3.0", en partie parce que je ne travaille plus chez Google. Jake, Scott, Eric et moi avons créé Moshi pour répondre aux diverses limitations de Gson. Voici dix petites raisons de préférer Moshi à Gson:
Prise en charge de Kotlin à venir.
Des qualificateurs tels que @HexColor int autorisent plusieurs représentations JSON pour un seul type Java.
@ToJson et @FromJson facilitent l'écriture et le test d'adaptateurs JSON personnalisés.
JsonAdapter.failOnUnknown () vous permet de rejeter des données JSON inattendues.
Exceptions prévisibles. Moshi lève IOException sur IO problèmes et JsonDataException sur des incohérences de types. Gson est partout.
JsonReader.selectName () évite le décodage UTF-8 et les allocations de chaîne inutiles dans le cas habituel.
Vous allez envoyer un fichier APK plus petit. Gson est 227 KiB, Moshi + Okio ensemble sont 200 KiB.
Moshi ne divulguera pas les détails d’implémentation des types de plate-forme dans votre JSON codé. Cela me fait peur de Gson: gson.toJson (SimpleTimeZone.getTimeZone ("GMT"))
Moshi ne fait pas l’échappement HTML étrange par défaut. Regardez le codage par défaut de Gson "12 & 5 = 4" pour un exemple.
Aucun adaptateur de date brisé installé par défaut.
Si vous écrivez un nouveau code, je vous recommande fortement de commencer par Moshi. Si vous avez un projet existant avec Gson, vous devez effectuer une mise à niveau si ce sera simple et sans risque. Sinon, restez avec Gson! Je fais de mon mieux pour que ce dernier reste compatible et fiable.