Porównanie parsera JSON dla Objective-C (JSON Framework, YAJL, TouchJSON itp.)

142

O ile wiem, istnieją trzy parsery JSON dla Objective-C, JSON Framework , YAJL i Touch JSON . Wtedy Te trzy miałyby swoje własne cechy.

Na przykład:
YAJL może być używany jako parser w stylu SAX.
JSON Framework ma stosunkowo długą historię i jest szeroko stosowany.
Dotknij JSON analizuje NSData zamiast NSString.

Ponadto, o ile testowałem, wynik porównania wydajności jest następujący:
[szybki] YAJL> JSON Framework> Touch JSON [wolny].

Jeśli znasz zalety i wady tych parserów JSON, czy możesz mi powiedzieć?
Na koniec, jeśli znasz inny parser JSON, powiedz mi.

tomute
źródło
1
Mój głos w górę! To świetne pytanie. Chciałbym, żeby niektórzy eksperci odpowiedzieli na to pytanie. Używam JSON Framework przez cały czas, ale tak bardzo chciałbym poznać zalety i wady innych parserów.
Chintan Patel
Dzięki Chintan. Używam też JSON Framework i nie narzekam. Ale mam nadzieję, że ktoś mógłby udzielić nam dobrej odpowiedzi.
tomute
5
A co ze strumieniowym parserem JSON dla Obj-C? Chciałbym mieć parser, który informowałby swojego delegata, kiedy nowy obiekt został przeanalizowany, np. Kiedy pobierasz duży JSON z serwera, możesz rozpocząć przetwarzanie części, która została odebrana. Może również zmniejszyć zużycie pamięci.
Martijn Thé
YAJL byłby dokładnie tym, czego chcesz. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
jutro
1
Kompleksowa recenzja .
ohho,

Odpowiedzi:

59

Jeśli szukasz szybkości, spójrz na JSONKit . Jest (zwykle) znacznie szybszy niż wspomniane już biblioteki JSON, często o rząd wielkości szybciej. Ze względu na to, że jest to „niedawno utworzona instancja pamięci podręcznej obiektów”, będzie (znowu, zwykle) zużywać mniej pamięci.

johne
źródło
2
Mogę to potwierdzić :) W moich testach JSONKit był prawie dwukrotnie szybszy niż YAJL i 50% szybszy niż JSON Framework, ale najwyraźniej dane, których użyłem do testu, były rodzajem najgorszego scenariusza dla JSONKit.
Kuba Suder,
2
Po drugie. Pamiętaj, aby ustawić flagę NS_BLOCK_ASSERTIONS w kompilacjach wydania. Jeszcze bardziej poprawia prędkość.
DenTheMan
1
AFAICT JSONKit nie obsługuje analizy opartej na strumieniu, więc jeśli jest to problem, możesz chcieć skorzystać z json-framework lub YAJL.
Frank Schmitt
JSONKit dla wydajności. Referece: obszerna recenzja z cocoanetics.com.
ohho
2
W tej chwili wygląda na to, że autor porzucił JSONKit. Występują pewne problemy z najnowszą wersją XCode, liczne żądania ściągnięcia, aby to naprawić, i żadne z nich nie zostało zaakceptowane.
Luke The Obscure
12

Biorąc pod uwagę porównanie, które zrobiłem , najszybszą biblioteką jest JSONKit, następnie NSJSONSerialization (teraz publiczne API) i NextiveJSON. SBJSON i TouchJSON są nieco wolniejsze niż poprzednie 3 biblioteki.

Porównanie zostało wykonane na telefonie iPhone 4S z systemem iOS 5.0.1.

bontoJR
źródło
1
Głosuj za wspomnieniem, że NSJSONSerialization jest częścią publicznego API! Zostanę przy tym, bo z konserwacją nie będzie problemu.
Johannes
tak samo. NSJSONSerializacja jest dla mnie rozsądną drogą - przynajmniej w przypadku kierowania na iOS 5.0 i nowsze .
Quintin Willison,
Link w odpowiedzi jest uszkodzony. Napraw to
Ossir
5

Jest też taki parser :

Nie pamiętam, jak natknąłem się na ten, ale wyglądał na lekki i prosty, więc pomyślałem, że pasuje do moich potrzeb. Zdarzenie to rozwidliło, aby dodać inicjalizację z NSData. Ponieważ potrzebowałem analizować małe odpowiedzi, nie przejmowałem się wydajnością. Byłoby jednak interesujące wiedzieć, jak to działa.

rzymski
źródło
Jest to najlżejszy i najprostszy parser JSON, z którego do tej pory korzystałem, wysoce zalecany.
Kelvin,
Wow, zrobiłem mój dzień. Taki prosty i elegancki parser!
thandasoru
3

Myślę, że JSONKit jest szybszy niż YAJL, a YAJL jest szybszy niż Touch JSON, a klasa NSJSONS IOS5 jest znacznie szybsza. NSJSONSerialization nie ma potrzeby używania żadnych zewnętrznych interfejsów API.

Arvind
źródło
2

Spójrz na ten post . <30 znaków>

berec
źródło
2
Jeszcze lepiej, zobacz zaktualizowaną wersję tutaj psionides.jogger.pl/2010/12/12/ ... (spoiler: wygrywa JSONKit).
Kuba Suder
2
Chociaż może to teoretycznie odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia.
Bill the Lizard
0

Dlaczego nie spojrzeć na testy porównawcze parserów firmy Akosma, w których porównuje różne rodzaje parserów. Jeśli brakuje jednego parsera, równie dobrze możesz dodać go do testów, ponieważ jego kod jest open source.

iPhoneWebServicesClient

codeclash
źródło