iPhone: тип переменной, возвращаемый yajl

Я новичок в программировании для iphone и хочу сделать следующее:

  1. получить данные с веб-сервера JSON REST
  2. разобрать полученные данные с помощью YAJL
  3. Нарисуйте график с этими данными, используя основной сюжет

Итак, 1-й элемент в порядке, я использую ASIHttpRequest, который работает, как и ожидалось, 3-й почти в порядке (мне еще нужно научиться настраивать основной сюжет).

У меня проблема со 2-м пунктом. Я использую YAJL, так как он кажется более быстрым парсером, так почему бы не попробовать :)

Вот часть кода, которая получает данные с сервера и анализирует их:

// Get server data
response_data = [request responseData];

// Parse JSON received
self.arrayFromData = [response_data yajl_JSON];
NSLog(@"Array from data: %@", self.arrayFromData);

На самом деле синтаксический анализ работает довольно хорошо, вывод NSLog выглядит примерно так:

14.06.2010 17:56:35.375 TEST_APP[3733:207] Массив из данных:

{
data =     (
            {
        val = 1317;
        date = "2010-06-10T15:50:01+02:00";
    },
            {
        val = 1573;
        date = "2010-06-10T16:20:01+02:00";
    },
        ........
    {
        val = 840;
        date = "2010-06-11T14:50:01+02:00";
    },
            {
        val = 1265;
        date = "2010-06-11T15:20:01+02:00";
    }
);
from = "2010-06-10T15:50:01+02:00";
to = "2010-06-11T15:20:01+02:00";    
max = "2590";    
}

Согласно объяснениям yajl-objc http://github.com/gabriel/yajl-objc , парсинг возвращает NSArray... Дело в том... я не знаю, как получить из него все значения, так как по мне он больше похож на NSDictionary, чем на NSArray...

Не могли бы вы помочь?

Большое спасибо, Люк

edit1: случается, что этот объект на самом деле является NSCFDictionary (!), Я все еще не могу получить от него значение, когда я пытаюсь использовать метод objectFromKey (который должен работать со словарем, нет?) он терпит неудачу.


person Luc    schedule 14.06.2010    source источник


Ответы (1)


Он возвращает NSDictionary. NSCFDictionary является частным подклассом и не имеет значения для этого обсуждения. Итак, похоже, вы извлечете такие вещи, как:

NSDictionary * responseDictionary = ...;
NSArray * dataArray = [responseDictionary objectForKey:@"data"];
for (NSDictionary * dataPair in dataArray) {
  NSLog(@"val: %@, date: %@", [dataPair objectForKey:@"val"], [dataPair objectForKey:@"date"]);
}
person Dave DeLong    schedule 14.06.2010
comment
Спасибо, Дэйв, я только что понял, почему метод objectForKey не работал (я использовал не тот ключ, глупый я....). Дело в том, что я до сих пор не понимаю, почему это NSDictionary, когда он должен быть NSArray (как указано в документе). Большое спасибо. - person Luc; 14.06.2010