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.


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.


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.


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.


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.




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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.