У меня возникли проблемы с получением данных, которые я хочу в файле JSON. Вот сокращенный вариант выхода из моей консоли:Разбор массива JSON со словарями
{
AUD = {
15m = "125.15547";
24h = "124.74";
buy = "121.0177";
last = "125.15547";
sell = "123.44883";
symbol = "$";
};
BRL = {
15m = "120.34";
24h = "120.34";
buy = "120.34";
last = "120.34";
sell = "120.34";
symbol = "R$";
};
CAD = {
15m = "129.08612";
24h = "131.07";
buy = "128.66227";
last = "129.08612";
sell = "129.08612";
symbol = "$";
};
}
Я пытаюсь разобрать этот файл с помощью встроенного в JSON синтаксического анализа библиотеки. Вот анализатор в моем viewDidLoad
метод:
_tickerArray = [NSMutableArray array];
NSURL *tickerDataURL = [NSURL URLWithString:@"https://blockchain.info/ticker"];
NSData *jsonData = [NSData dataWithContentsOfURL:tickerDataURL];
NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSLog(@"%@", dataDictionary);
NSArray *ar = [NSArray arrayWithObject:dataDictionary];
for (NSString *key in [dataDictionary allKeys]) {
for (NSDictionary *dict in ar) {
TickerData *t;
t.currency = [dict objectForKey:key];
t.symbol = [dict objectForKey:@"symbol"];
t.last = [dict objectForKey:@"last"];
[_tickerArray addObject:t];
}
}
Я хочу, чтобы хранить код валюты (например, AUD or BRL
) в t.currency
наряду с некоторыми другими данными, содержащимися в словаре валюте, но теперь мое приложение рушится. Код Ошибка:
NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
Ни один из объектов не кажется, добавляются в _tickerArray
Помощь?
EDIT: Получение ключей для отображения с правильными данными заполнения других полей:
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSLog(@"%@", dataDictionary);
for (NSString *key in [dataDictionary allKeys]) {
NSDictionary *dic=[dataDictionary objectForKey:key];
TickerData *t=[[TickerData alloc] init];
t.currency = key;//EDITED
t.symbol = [dic objectForKey:@"symbol"];
t.last = [dic objectForKey:@"last"];
[_tickerArray addObject:t];
}
Кажется, он работает лучше, чем код, который у меня был. Хотя теперь я получаю сообщение об ошибке '__NSCFNumber objectForKey:]: непризнанный селектор, отправленный в экземпляр 0x7184550', причем этот экземпляр является' dict', который, согласно моей консоли, получает значение от '15m' в файле JSON – cherbear
Отладка и попытайтесь исправить, мой код непроверен, хотя .. Но ваш код не будет работать, что вы пытаетесь сделать. – iphonic
+1! Небольшая коррекция: 't.currency = [dict objectForKey: key]' должно быть, должно быть 't.currency = [dict objectForKey: @" symbol "]' –