Confronto di JSON Parser per Objective-C (JSON Framework, YAJL, TouchJSON, ecc.)


142

Per quanto ne so, ci sono tre JSON Parser per Objective-C, JSON Framework , YAJL e Touch JSON . Quindi, questi tre avrebbero le loro caratteristiche.

Ad esempio:
YAJL può essere utilizzato come parser in stile SAX.
JSON Framework ha una storia relativamente lunga ed è ampiamente utilizzato.
Tocca JSON analizza NSData anziché NSString.

Inoltre, per quanto ho testato, il risultato del confronto delle prestazioni è il seguente:
[veloce] YAJL> JSON Framework> Touch JSON [lento].

Se conosci pro e contro di questi parser JSON, potresti dirmelo?
Infine, se conosci qualche altro JSON Parser, per favore dimmelo.


1
Il mio voto in alto! Questa è un'ottima domanda Mi piacerebbe che alcuni esperti rispondessero a questo. Ho sempre usato JSON Framework ma, sono impaziente di conoscere i pro e i contro di altri parser.
Chintan Patel,

Grazie Chintan. Sto anche usando JSON Framework e non ho lamentele. Spero che qualcuno possa darci una buona risposta.
scade il

5
Che dire di un parser JSON in streaming per Obj-C? Mi piacerebbe avere un parser che indichi che è delegato quando è stato analizzato un nuovo oggetto, ad esempio quando si scarica un JSON di grandi dimensioni da un server, è possibile iniziare a elaborare la parte che è stata ricevuta. Potrebbe anche ridurre il footprint di memoria.
Martijn, il

YAJL sarebbe esattamente quello che vuoi. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
tomute

1
Una recensione completa .
oh,

Risposte:


59

Se stai cercando velocità, dai un'occhiata a JSONKit . È (di solito) molto più veloce delle già citate librerie JSON, spesso un ordine di grandezza più veloce. E a causa della sua "cache degli oggetti istanziata di recente", utilizzerà (di nuovo, di solito) anche meno memoria.


2
Posso confermarlo :) Nei miei test, JSONKit era quasi due volte più veloce di YAJL e il 50% più veloce di JSON Framework, ma apparentemente i dati che ho usato per il test erano una specie di peggior scenario per JSONKit.
Kuba Suder,

2
Secondo quello. Ricorda di impostare il flag NS_BLOCK_ASSERTIONS nelle build di rilascio. Migliora ulteriormente la velocità.
DenTheMan,

1
AFAICT JSONKit non supporta l'analisi basata sullo stream, quindi se si tratta di un problema potresti voler utilizzare json-framework o YAJL.
Frank Schmitt,

JSONKit per prestazioni. Referece: una recensione completa di cocoanetics.com.
oh,

2
A partire da ora, sembra che JSONKit sia stato abbandonato dall'autore. Ci sono alcuni problemi con l'ultima versione di XCode, numerose richieste pull per risolverlo e nessuna di queste è stata accettata.
Luke The Obscure,

12

Considerando un confronto che ho fatto , la libreria più veloce è JSONKit, seguita da NSJSONSerialization (ora API pubblica) e NextiveJSON. SBJSON e TouchJSON sono un po 'più lenti delle precedenti 3 librerie.

Il confronto è stato effettuato utilizzando un iPhone 4S con iOS 5.0.1.


1
Voto positivo per aver menzionato che NSJSONSerialization fa parte dell'API pubblica! Continuerò con questo, perché non ci saranno problemi con la manutenzione.
Johannes,

idem. NSJSONSerialization , per me, è la strada sensata da percorrere, almeno per il targeting di iOS 5.0 e versioni successive.
Quintin Willison,

Il link nella risposta è interrotto. Per favore,
risolvilo

5

C'è anche questo parser :

Non ricordo come mi sono imbattuto in questo, ma sembrava leggero e semplice, quindi ho pensato che fosse adatto alle mie esigenze. L'ho biforcato per aggiungere l'inizializzazione da NSData. Dato che avevo bisogno di analizzare piccole risposte, non mi importava della performance. Sarebbe interessante sapere come si comporta però.


Questo è il parser JSON più leggero e semplice che ho usato finora, altamente raccomandato.
Kelvin,

Wow, ha reso la mia giornata. Un parser così semplice ed elegante!
Thandasoru,

3

Penso che JSONKit sia più veloce di YAJL e YAJL sia più veloce di Touch JSON e la classe NSJSONSerialization class IOS5 sia molto più veloce. NSJSONSerialization non ha bisogno di usare API di terze parti.




0

Perché non dare un'occhiata ai benchmark di Akosma sui parser in cui confronta diversi tipi di parser. Se manca un parser, potresti anche aggiungerlo ai test, poiché il suo codice è open source.

iPhoneWebServicesClient

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.