Сравнение парсера JSON для Objective-C (JSON Framework, YAJL, TouchJSON и т. Д.)

142

Насколько мне известно, существует три парсера JSON для Objective-C, JSON Framework , YAJL и Touch JSON . Тогда у этих троих будут свои особенности.

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

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

Если вы знаете плюсы и минусы этих парсеров JSON, не могли бы вы мне сказать?
Наконец, если вы знаете какой-либо другой парсер JSON, сообщите мне.

завтра
источник
1
Мой голос за! Это большой вопрос. Хотелось бы, чтобы некоторые эксперты ответили на этот вопрос. Я всегда использую JSON Framework, но я хочу знать плюсы и минусы других парсеров.
Чинтан Патель
Спасибо, Чинтан. Я также использую JSON Framework и не жалуюсь. Но я надеюсь, что кто-нибудь сможет дать нам хороший ответ.
завтра
5
А как насчет потокового парсера JSON для Obj-C? Я хотел бы иметь синтаксический анализатор, который сообщал бы его делегату, когда новый объект был проанализирован, например, когда вы загружаете большой JSON с сервера, вы можете начать обработку полученной части. Это также может снизить объем памяти.
Martijn Thé
ЯЙЛ будет именно тем, что вы хотите. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
завтра,
1
Комплексный обзор .
ohho

Ответы:

59

Если вам нужна скорость, обратите внимание на JSONKit . Это (обычно) намного быстрее, чем уже упомянутые библиотеки JSON, часто на порядок быстрее. И из-за того, что это «кэш недавно созданных объектов», он (опять же, обычно) также использует меньше памяти.

Джон
источник
2
Я могу это подтвердить :) В моих тестах JSONKit был почти в два раза быстрее, чем YAJL, и на 50% быстрее, чем JSON Framework, но, видимо, данные, которые я использовал для теста, были своего рода худшим сценарием для JSONKit.
Куба Судер
2
Во-вторых, что. Не забудьте установить флаг NS_BLOCK_ASSERTIONS в ваших сборках Release. Это еще больше увеличивает скорость.
DenTheMan
1
AFAICT JSONKit не поддерживает парсинг на основе потоков, поэтому, если это проблема, вы можете использовать json-framework или YAJL.
Фрэнк Шмитт
JSONKit для повышения производительности. Ссылка: исчерпывающий обзор на сайте cocoanetics.com.
ohho
2
На данный момент похоже, что автор отказался от JSONKit. Есть некоторые проблемы с последней версией XCode, многочисленные запросы на исправление, но ни один из них не был принят.
Люк Obscure
12

Учитывая проведенное мной сравнение , самой быстрой библиотекой является JSONKit, за которой следуют NSJSONSerialization (теперь общедоступный API) и NextiveJSON. SBJSON и TouchJSON немного медленнее, чем предыдущие 3 библиотеки.

Сравнение проводилось на iPhone 4S с iOS 5.0.1.

bontoJR
источник
1
Проголосуйте за упоминание о том, что NSJSONSerialization является частью общедоступного API! Я буду придерживаться этого, потому что проблем с обслуживанием не возникнет.
Johannes
то же самое. NSJSONSerialization для меня - разумный путь - по крайней мере, для таргетинга на iOS 5.0 и выше.
Quintin Willison
Ссылка в ответ не работает. Пожалуйста, исправьте
Оссир
5

Еще есть парсер :

Не помню, как я наткнулся на этот, но он выглядел легким и простым, поэтому я подумал, что он подходит для моих нужд. Я его разветвил, чтобы добавить инициализацию из NSData. Поскольку мне нужно было разбирать небольшие ответы, меня не волновала производительность. Хотя было бы интересно узнать, как это работает.

Римский
источник
Это самый легкий и простой парсер JSON, который я когда-либо использовал, настоятельно рекомендуется.
Кельвин
Вау, сделал мой день. Такой простой и элегантный парсер!
thandasoru
3

Я думаю, что JSONKit быстрее, чем YAJL, а YAJL быстрее, чем Touch JSON, а класс IOS5 NSJSONSerialization намного быстрее. NSJSONSerialization не требует использования сторонних API.

Арвинд
источник
2

Посмотри на этот пост . <30 символов>

Berec
источник
2
Еще лучше, посмотрите обновленную версию здесь psionides.jogger.pl/2010/12/12/… (спойлер: JSONKit побеждает).
Куба Судер
2
Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.
Bill the Lizard
0

Почему бы не взглянуть на тесты akosma для парсеров, где он сравнивает разные типы парсеров. Если один парсер отсутствует, вы также можете добавить его в тесты, поскольку его код имеет открытый исходный код.

iPhoneWebServicesClient

codeclash
источник