Порівняння JSON Parser для Objective-C (JSON Framework, YAJL, TouchJSON тощо)


142

Наскільки мені відомо, є три парсери JSON для Objective-C, JSON Framework , YAJL і Touch JSON . Тоді ці троє мали б свої особливості.

Наприклад:
YAJL можна використовувати як аналізатор стилю SAX.
JSON Framework має відносно довгу історію і широко використовується.
Торкніться JSON аналізує NSData замість NSString.

Крім того, наскільки я тестував, результат порівняння продуктивності такий:
[швидкий] YAJL> JSON Framework> Touch JSON [повільний].

Якщо ви знаєте плюси і мінуси цих парсерів JSON, ви могли б мені сказати?
І нарешті, якщо ви знаєте будь-який інший JSON Parser, будь ласка, скажіть мені.


1
Мій голос піднявся! Це чудове питання. Хочеться, щоб на це відповіли деякі експерти. Я використовую JSON Framework протягом усього часу, але так, хочу бачити плюси і мінуси інших аналізаторів.
Чінтан Патель

Спасибі Чінтан. Я також використовую JSON Framework і не маю нарікань. Але, сподіваюся, хтось міг би дати нам хорошу відповідь.
tomute

5
Що з потокового аналізатора JSON для Obj-C? Я хотів би мати аналізатор, який би повідомив про його делегат, коли новий об'єкт був розібраний, наприклад, коли ви завантажуєте великий JSON з сервера, ви можете почати обробляти отриману частину. Це також може знизити слід пам'яті.
Martijn Thе

YAJL був би саме тим, що ви хочете. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
tomute

1
Комплексний огляд .
ого

Відповіді:


59

Якщо ви шукаєте швидкості, погляньте на JSONKit . Це (як правило) набагато швидше, ніж уже згадані бібліотеки JSON, часто на порядок швидше. І тому, що це "нещодавно створений кеш-об'єкт", він (знову ж, зазвичай) також використовуватиме менше пам'яті.


2
Я можу це підтвердити :) У своїх тестах JSONKit був майже вдвічі швидшим за YAJL і на 50% швидше, ніж JSON Framework, але, мабуть, дані, які я використовував для тесту, були свого роду найгіршим сценарієм для JSONKit.
Kuba Suder

2
По-друге, що. Не забудьте встановити прапор NS_BLOCK_ASSERTIONS у своїх версіях випусків. Це ще більше покращує швидкість.
DenTheMan

1
AFAICT JSONKit не підтримує розбиття на основі потоку, тому, якщо це проблема, ви, можливо, захочете скористатись json-Framework або YAJL.
Френк Шмітт

JSONKit для продуктивності. Referece: всебічний огляд cocoanetics.com.
ой

2
На даний момент, схоже, автор JSONKit був кинутий автором. Існує кілька проблем з останньою версією XCode, численні запити на виправлення, щоб виправити її, і жодна з них не була прийнята.
Люк Неясний

12

Враховуючи порівняння, яке я зробив , найшвидша бібліотека - це JSONKit, за нею слідують NSJSONSerialization (тепер публічний API) та NextiveJSON. SBJSON і TouchJSON трохи повільніше, ніж попередні 3 бібліотеки.

Порівняння зроблено за допомогою iPhone 4S з iOS 5.0.1.


1
Проголосуйте за те, щоб згадати, що NSJSONSerialization є частиною публічного API! Я буду дотримуватися цього, тому що проблем із обслуговуванням не виникне.
Йоганнес

ditto. Для мене NSJSONSerialization - це розумний шлях - принаймні для націлювання на iOS 5.0 і новіших версій .
Квінтін Віллісон

Посилання у відповіді порушено. Виправте це
Ossir

5

Є також цей аналізатор :

Я не пам'ятаю, як я натрапив на цей, але він виглядав легким і простим, тому я подумав, що він відповідає моїм потребам. Я подія відправила його, щоб додати ініціалізацію від NSData. Оскільки мені потрібно було проаналізувати невеликі відповіді, я не хвилювався у виконанні. Було б цікаво дізнатися, як це працює.


Це самий легкий і простий синтаксичний аналізатор JSON, який я використовував до цього часу, настійно рекомендую.
Кельвін

Ого, зробив день. Такий простий і елегантний аналізатор!
thandasoru

3

Я думаю, що JSONKit швидше, ніж YAJL, а YAJL - швидше, ніж Touch JSON та IOS5, клас NSJSONSerialization значно швидший. NSJSONSerialization не потребує використання жодних сторонніх API.


2

Подивіться на цю публікацію . <30 символів>


2
Ще краще дивіться оновлену версію тут psionides.jogger.pl/2010/12/12/… (спойлер: JSONKit win).
Kuba Suder

2
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Білл Ящірка


0

Чому б не подивитись орієнтири akosma на аналізаторах, де він порівнює різні види парсерів. Якщо одного аналізатора відсутнє, ви можете також додати його до тестів, оскільки його код є відкритим кодом.

iPhoneWebServicesClient

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.