Comparaison de JSON Parser pour Objective-C (JSON Framework, YAJL, TouchJSON, etc.)

142

Pour autant que je sache, il existe trois analyseurs JSON pour Objective-C, JSON Framework , YAJL et Touch JSON . Ensuite, ces trois auraient leurs propres caractéristiques.

Par exemple:
YAJL peut être utilisé comme analyseur de style SAX.
JSON Framework a une histoire relativement longue et est largement utilisé.
Touch JSON analyse NSData au lieu de NSString.

De plus, d'après ce que j'ai testé, le résultat de la comparaison des performances est le suivant:
[rapide] YAJL> JSON Framework> Touch JSON [lent].

Si vous connaissez les avantages et les inconvénients de ces analyseurs JSON, pourriez-vous me le dire?
Enfin, si vous connaissez un autre analyseur JSON, veuillez me le dire.

tomute
la source
1
Mon vote! c'est une excellente question. J'adorerais que certains experts répondent à celui-ci. J'utilise JSON Framework depuis le début, mais je suis impatient de connaître les avantages et les inconvénients des autres analyseurs.
Chintan Patel
Merci Chintan. J'utilise également JSON Framework et je n'ai aucune plainte. Mais j'espère que quelqu'un pourra nous donner une bonne réponse.
mardi
5
Qu'en est-il d'un analyseur JSON en streaming pour Obj-C? J'aimerais avoir un analyseur qui indiquerait son délégué quand un nouvel objet a été analysé, par exemple lorsque vous téléchargez un gros JSON à partir d'un serveur, vous pouvez commencer à traiter la partie qui a été reçue. Cela peut également réduire l'encombrement de la mémoire.
Martijn Thé
YAJL serait exactement ce que vous voulez. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
tomute
1
Un examen complet .
ohho

Réponses:

59

Si vous recherchez la vitesse, jetez un œil à JSONKit . C'est (généralement) beaucoup plus rapide que les bibliothèques JSON déjà mentionnées, souvent un ordre de grandeur plus rapide. Et à cause de son "cache d'objets récemment instancié", il utilisera (encore une fois, généralement) moins de mémoire.

Johne
la source
2
Je peux le confirmer :) Dans mes tests, JSONKit était presque deux fois plus rapide que YAJL et 50% plus rapide que JSON Framework, mais apparemment, les données que j'ai utilisées pour le test étaient une sorte de pire scénario pour JSONKit.
Kuba Suder
2
Deuxièmement. N'oubliez pas de définir l'indicateur NS_BLOCK_ASSERTIONS dans vos versions de version. Cela améliore encore la vitesse.
DenTheMan
1
AFAICT JSONKit ne prend pas en charge l'analyse basée sur le flux, donc si c'est un problème, vous voudrez peut-être utiliser json-framework ou YAJL.
Frank Schmitt
JSONKit pour les performances. Referece: une revue complète par cocoanetics.com.
ohho
2
Pour le moment, il semble que JSONKit a été abandonné par l'auteur. Il y a quelques problèmes avec la dernière version de XCode, de nombreuses demandes d'extraction pour le corriger, et aucun d'entre eux n'a été accepté.
Luke The Obscure
12

Compte tenu d' une comparaison que j'ai faite , la bibliothèque la plus rapide est JSONKit, suivie de NSJSONSerialization (maintenant API publique) et NextiveJSON. SBJSON et TouchJSON sont un peu plus lents que les 3 bibliothèques précédentes.

La comparaison a été effectuée à l'aide d'un iPhone 4S avec iOS 5.0.1.

bontoJR
la source
1
Votez pour avoir mentionné que NSJSONSerialization fait partie de l'API publique! Je vais m'en tenir à cela, car il n'y aura aucun problème de maintenance.
Johannes
idem. NSJSONSerialization , pour moi, est la voie la plus judicieuse - au moins pour cibler iOS 5.0 et plus.
Quintin Willison
Le lien dans la réponse est rompu. S'il vous plaît réparer
Ossir
5

Il y a aussi cet analyseur :

Je ne me souviens pas comment je suis tombé sur celui-ci, mais il avait l'air léger et simple, alors j'ai pensé qu'il répondait à mes besoins. Je l'ai bifurqué afin d'ajouter l'initialisation à partir de NSData. Comme j'avais besoin d'analyser de petites réponses, je me fichais de la performance. Il serait cependant intéressant de savoir comment cela fonctionne.

romain
la source
C'est l'analyseur JSON le plus léger et le plus simple que j'ai utilisé jusqu'à présent, hautement recommandé.
Kelvin
Wow, a fait ma journée. Un analyseur si simple et élégant!
thandasoru
3

Je pense que JSONKit est plus rapide que YAJL et YAJL est plus rapide que Touch JSON et la classe IOS5 NSJSONSerialization est beaucoup plus rapide. NSJSONSerialization n'a pas besoin d'utiliser des API tierces.

Arvind
la source
2

Regardez ce post . <30 caractères>

berec
la source
2
Mieux encore, voir la version mise à jour ici psionides.jogger.pl/2010/12/12 / ... (spoiler: JSONKit gagne).
Kuba Suder
2
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence.
Bill the Lizard
0

Pourquoi ne pas jeter un oeil aux benchmarks d'Akosma sur les analyseurs où il compare différents types d'analyseurs. S'il manque un analyseur, vous pouvez aussi bien l'ajouter aux tests, car son code est open source.

iPhoneWebServicesClient

codeclash
la source