Сравнение парсера 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.


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 символов>


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

2
Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.
Bill the Lizard


0

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

iPhoneWebServicesClient

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.