Разбор больших объемов данных JSON в iOS - PullRequest
4 голосов
/ 02 сентября 2011

Я получаю большую строку JSON (11 МБ) из веб-службы. Когда я анализирую данные с помощью JSONKit, мое приложение достигает 70 МБ, я получаю предупреждения о памяти и приложение вылетает.

Как мне разобрать эти данные?

Ответы [ 4 ]

3 голосов
/ 08 сентября 2011

Лучше всего взглянуть на парсер YAJL JSON, который поддерживает синтаксический анализ событий.Затем вы можете анализировать JSON по мере его поступления в фид данных, и вам не нужно будет сохранять все это в памяти сразу.

https://github.com/gabriel/yajl-objc

Извините, я не знаюлюбых примеров кода, демонстрирующих это использование на практике.

3 голосов
/ 02 сентября 2011

самое простое решение - уменьшить размер json, который вы получаете с сервера. Если вы не можете этого сделать, единственный способ проанализировать огромный JSON - это использовать отложенную оценку.

Я не думаю, что есть библиотека JSON для target-c, которая поддерживает ленивую оценку. Однако вы можете реализовать один.

2 голосов
/ 07 сентября 2012

SBJson поддерживает разбор потока данных. Это позволяет обрабатывать ваш документ по крупицам, поэтому вам не нужно держаться за весь документ. Дистрибутив содержит два примера того, как это использовать. Сначала есть StreamParserIntegrationTest.m , а затем демонстрационное приложение TweetStream : приложение для Twitter, которое будет сидеть и анализировать поток HTTP весь день (если вы позволите), отображая каждый твит в том виде, в каком они есть. войди и затем выбрось их.

( Отказ от ответственности: Я автор SBJson.)

1 голос
/ 07 сентября 2011

11 МБ - это большая информация, и решение состоит только в том, чтобы минимизировать объем данных Поддержка JSON не является родной для iOS, но для этой цели есть отличный фреймворк: http://code.google.com/p/json-framework/

Эта структура поддерживает преобразование необработанных объектов JSON в объекты Objective-C (NSArray, NSDictionary) и наоборот.

...