Vergleich des JSON-Parsers für Objective-C (JSON Framework, YAJL, TouchJSON usw.)


142

Soweit ich weiß, gibt es drei JSON-Parser für Objective-C, JSON Framework , YAJL und Touch JSON . Dann hätten diese drei ihre eigenen Eigenschaften.

Beispiel:
YAJL kann als Parser im SAX-Stil verwendet werden.
JSON Framework hat eine relativ lange Geschichte und ist weit verbreitet.
Berühren Sie JSON analysiert NSData anstelle von NSString.

Soweit ich getestet habe, ist das Ergebnis des Leistungsvergleichs außerdem wie folgt:
[schnell] YAJL> JSON Framework> Touch JSON [langsam].

Wenn Sie die Vor- und Nachteile dieser JSON-Parser kennen, können Sie mir das sagen?
Wenn Sie einen anderen JSON-Parser kennen, sagen Sie es mir bitte.


1
Meine Stimme! Das ist eine gute Frage. Würde es lieben, wenn einige Experten diese Frage beantworten. Ich habe die ganze Zeit JSON Framework verwendet, aber Sie sind gespannt auf die Vor- und Nachteile anderer Parser.
Chintan Patel

Danke Chintan. Ich verwende auch JSON Framework und habe keine Beschwerden. Aber ich hoffe, jemand konnte uns eine gute Antwort geben.
Tomute

5
Was ist mit einem Streaming-JSON-Parser für Obj-C? Ich hätte gerne einen Parser, der dem Delegierten mitteilt, wann ein neues Objekt analysiert wurde, z. B. wenn Sie einen großen JSON von einem Server herunterladen, können Sie mit der Verarbeitung des empfangenen Teils beginnen. Dies kann auch den Speicherbedarf verringern.
Martijn Thé

YAJL wäre genau das, was Sie wollen. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
Tomute

1
Eine umfassende Überprüfung .
Ohho

Antworten:


59

Wenn Sie Geschwindigkeit suchen, schauen Sie sich JSONKit an . Es ist (normalerweise) viel schneller als die bereits erwähnten JSON-Bibliotheken, oft um eine Größenordnung schneller. Und aufgrund des "kürzlich instanziierten Objektcaches" wird (normalerweise) auch weniger Speicher benötigt.


2
Ich kann das bestätigen :) In meinen Tests war JSONKit fast doppelt so schnell wie YAJL und 50% schneller als JSON Framework, aber anscheinend waren die Daten, die ich für den Test verwendet habe, eine Art Worst-Case-Szenario für JSONKit.
Kuba Suder

2
Zweitens das. Denken Sie daran, das Flag NS_BLOCK_ASSERTIONS in Ihren Release-Builds zu setzen. Es verbessert die Geschwindigkeit noch weiter.
DenTheMan

1
AFAICT JSONKit unterstützt kein Stream-basiertes Parsing. Wenn dies ein Problem ist, sollten Sie sich für json-framework oder YAJL entscheiden.
Frank Schmitt

JSONKit für Leistung. Referenz: eine umfassende Überprüfung durch cocoanetics.com.
Ohho

2
Es sieht so aus, als ob JSONKit vom Autor aufgegeben wurde. Es gibt einige Probleme mit der neuesten Version von XCode, zahlreiche Pull-Anforderungen, um das Problem zu beheben, und keine davon wurde akzeptiert.
Luke The Obscure

12

In Anbetracht meines Vergleichs ist JSONKit die schnellste Bibliothek, gefolgt von NSJSONSerialization (jetzt öffentliche API) und NextiveJSON. SBJSON und TouchJSON sind etwas langsamer als die vorherigen 3 Bibliotheken.

Der Vergleich wurde mit einem iPhone 4S mit iOS 5.0.1 durchgeführt.


1
Up-Vote für die Erwähnung, dass NSJSONSerialization Teil der öffentlichen API ist! Ich werde dabei bleiben, da es keine Probleme mit der Wartung gibt.
Johannes

dito. NSJSONSerialization ist für mich der vernünftige Weg - zumindest für iOS 5.0 und höher.
Quintin Willison

Der Link in der Antwort ist unterbrochen. Bitte beheben Sie es
Ossir

5

Es gibt auch diesen Parser :

Ich erinnere mich nicht, wie ich auf dieses gestoßen bin, aber es sah leicht und einfach aus, also dachte ich, dass es meinen Bedürfnissen entspricht. Ich habe es gegabelt, um die Initialisierung von NSData hinzuzufügen. Da ich kleine Antworten analysieren musste, war mir die Leistung egal. Es wäre jedoch interessant zu wissen, wie es funktioniert.


Dies ist der leichteste und einfachste JSON-Parser, den ich bisher verwendet habe. Sehr zu empfehlen.
Kelvin

Wow, machte meinen Tag. So ein einfacher und eleganter Parser!
Thandasoru

3

Ich denke, JSONKit ist schneller als YAJL und YAJL ist schneller als Touch JSON und IOS5-Klasse NSJSONSerialization-Klasse ist viel schneller. Für die NSJSONSerialisierung müssen keine APIs von Drittanbietern verwendet werden.




0

Schauen Sie sich Akosmas Benchmarks für Parser an, in denen er verschiedene Arten von Parsern vergleicht. Wenn ein Parser fehlt, können Sie ihn auch zu den Tests hinzufügen, da sein Code Open Source ist.

iPhoneWebServicesClient

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.