Я получаю ошибку followig после преобразования JSON эхо в словарь,Ошибки в формате JSON или запись словарь
* Нагрузочное приложение из-за неперехваченное исключение «NSInvalidArgumentException», причины: «* - [NSMutableArray insertObject: atIndex:]: попытаться вставить нулевой объект в 0 ' *** Стек вызовов при первом броске:
Вот мой код десериализации JSON, я использовал эту модель раньше для простого plist. Теперь я посылаю более сложное эхо (с объектами и клавишами), и он сбой.
NSURL *url = [NSURL URLWithString:@"http://10.0.1.8/~imac/iphone/jsontest.php"];
NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url];
NSLog(jsonreturn); // Look at the console and you can see what the results are
NSData *jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSError *error = nil;
NSDictionary * dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
if (dict)
{
rowsArray = [dict objectForKey:@"member"];
[rowsArray retain];
}
NSLog(@"Array: %@",rowsArray);
NSLog(@"count is: %i", [self.rowsArray count]);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *choiceR = [documentsDirectory stringByAppendingPathComponent:@"FollowingArray"];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:rowsArray];
[array writeToFile:choiceR atomically:YES];
[array release];
[jsonreturn release];
Вот фрагмент эхо:
{"member":[
{"userid":"18",
"firstname":"Frank",
"lastname":"Johnson",
"profile":{"school":"7","grade":"12","teacher"}
},
{"userid":"38",
"firstname":"maggy",
"lastname":"Johnson",
"profile":{"school":"7","grade":"12","teacher"}
}]}
Я предполагаю, что я получаю аварию, потому что массив пуст. Любые идеи, если эхо вызывает сбой, или там инструкция JSON обрабатывает такие типы ключей и объектов.
Спасибо, Майкл
Я использовал это раньше, это утверждение неверно для вложенного массива? rowsArray = [dict objectForKey: @ "member"]; –
Данные JSON выглядят как вложенный словарь. «Участник» первого уровня и другого уровня выглядит как ключевые значения, то есть: «идентификатор пользователя», «18» и т. Д. Таким образом, это будет NSDictionary * rowsDict = [dict objectForKey: @ "member"]; Проще всего было бы избавиться от уровня «члена», вручную отредактировав его из ваших данных, а затем вы работаете только с одним словарем. –