32 votes

Comparaison des performances et de l'utilisabilité des bibliothèques Android JSON

Quelle est la meilleure bibliothèque là-bas pour l'anade JSON sur Android. Je sais que le cadre Android a une bibliothèque JSON intégré, et j'ai entendu parler de GSON. Mais je me demande si quelqu'un a comparé les différentes options JSON sur Android et trouver une justification pour choisir l'un sur l'autre. Je pense à la performance et à la convivialité comme critères principaux.

40voto

Programmer Bruce Points 16306

Tandis que il ya une poignée de Java vers/depuis-JSON Api qui facilitent (de base) de liaison entre JSON et arbitraire Java structure de données, Jackson et Gson sont de loin les plus sophistiqués (capable) riche en fonctionnalités et options.

En juillet dernier (2011), j'ai posté une série d'articles sur mon blog, comparant à l'aide de Gson contre Jackson, pas à pas grâce à des fonctionnalités comme ils l'ont été organisées dans le Gson Guide de l'Utilisateur, y compris des exemples de comparable implémentations de Jackson (et des implantations dans Gson, où la Gson Guide de l'Utilisateur a été incomplète ou cassées).

La sixième partie de la série permet de prendre facilement des liens de navigation pour la comparaison, ainsi qu'un résumé de comparaison de la liste. http://programmerbruce.blogspot.com/2011/07/gson-v-jackson-part-6.html

C'est le plus complet de la comparaison de l'utilisation de Gson rapport à Jackson pour la commune de JSON-à/de-Java tâches connues.

Comme mentionné précédemment, la comparaison des performances de différents Java-à/de-JSON Api sont disponibles à https://github.com/eishay/jvm-serializers/wiki. La version actuelle de Gson (2.0) montre qu'environ 16 fois plus lente que la version actuelle de Jackson (1.9.2) à la sérialisation et la désérialisation de 500 octets structure JSON, en utilisant très comparable efforts de mise en œuvre (juste une ou deux lignes de code).

Martin Adamek a affiché des résultats de la performance des différentes Api fonctionnant sur Android à http://martinadamek.com/2011/01/31/comparison-of-json-parsers-performance-on-android/ et http://martinadamek.com/2011/02/04/json-parsers-performance-on-android-with-warmup-and-multiple-iterations/

9voto

kabuko Points 23166

GSON est vraiment simple à utiliser et si la performance n'est pas un problème, c'est assez agréable. Jackson est beaucoup, beaucoup plus rapide , bien que n'est pas vraiment que beaucoup plus d'effort à utiliser. Comme je l'ai dit dans le passé, dans un autre DONC, la question, j'ai eu d'énormes gains de performance (lorsque l'on travaille avec de grands ensembles de JSON) par simple basculement de Jackson à partir de GSON.

3voto

mjmarsh Points 5858

Eh bien parfois, de performance et de facilité d'utilisation peut être en désaccord, mais j'ai trouvé GSON pour être plus facile à utiliser que les solutions de rechange, comme Jackson, org.json et les autres. Je suis actuellement à la sérialisation de données JSON qui a des objets et des listes de 3 ou 4 niveaux de profondeur. Cela étant dit, j'ai adapté mon JSON est le plus approprié pour la sérialisation, mais dans l'ensemble GSON a été grande.

3voto

ThomasRS Points 5705

Cette réponse est vu à partir d'un point de vue de la mémoire, car cela peut aussi être considéré comme de la performance :-P.

J'ai juste mis en œuvre l'analyse de 70KB fichier JSON dans Android, l'analyse d'un tableau d'objets qui devraient charger à partir de zéro ou de mise à jour déjà présents liaison de données objets, tous sur HTTP.

Le plus grand inconvénient avec l' intégré dans org.json paquet pour android runtime 3 a été

  1. le JSONTokener constructeur n'accepte une Chaîne de caractères, pas de Lecteur
  2. le manque de soutien pratique pour les pull-analyse

Cela signifie généralement que vous devez garder tout le fichier en mémoire (pensez à 2x la taille en octets) et, en outre, tenir les objets JSON en mémoire à la même heure, avant de vous commencez à faire votre liaison de données. Tellement pire des cas est de 2x la taille du fichier, objets JSON et de liaison de données objets (généralement au moins 2x le besoin de mémoire.

Si vous tirez l'analyser à partir d'un lecteur, vous pouvez l'obtenir en bas à 1x. C'est la chose la plus importante que vous pouvez faire à partir de la mémoire de la perspective.

Et, surprise, surprise, si vous allez avec un peu plus de classes modernes, comme Jackson, ou simplement les sources les plus récentes de org.json, vous serez en mesure d'obtenir autour de ces deux contraintes sans problème, plus tard android runtime semble aussi avoir une certaine utilité des classes pour JSON pull-analyse.

Si vous êtes coincé avec un vieux moteur d'exécution, et que vous voulez garder l'empreinte de l'application vers le bas, tout comme moi, vous pouvez copier le JSONTokener de org.json et modifier votre haut niveau analyser boucle (dans mon cas, le tableau analyser boucle) et de faire la liaison de données sur chaque membre du groupe au lieu de l'ensemble du tableau à la fois. De cette façon, vous réutiliser les objets JSON déjà dans l'android runtime, autant que possible, et encore obtenir le streaming effet (au prix de l'ajout d'identifiants à chaque objet de plus haut niveau).

1voto

Plastic Sturgeon Points 8046

le Android JSON est très fonctionnel, mais n'a pas de cloches un de sifflets. Où que GSON vous permet de spécifier les mappages entre vos classes et de leur représentation json. Il a aussi très agréable de conversion automatique de toutes les valeurs primitives en json, avec aucun travail supplémentaire de votre part.

Le paiement avec GSON est si vous avez beaucoup de JSON communcaion, ou des objets complexes qui nécessitent de la valeur de vérification pour empêcher des valeurs illégales (comme le NaN) et d'autres cas où java-pour-JSON est moins simple.

Mais si vous avez juste besoin d'envoyer et de recevoir un simple objet json, la bibliothèque native fait le truc tout à fait respectable. Je l'utilise dans mon projet en cours de poster des scores élevés à un serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X