Извините, что вы отправили еще один вопрос о преобразовании в NSArray, но я не могу заставить его работать даже после чтения десятков сообщений по одной и той же проблеме. Кажется, очень легко, но ...Преобразование NSString в формате JSON в NSArray не удается
- (void) parseList : (NSString *) str {
NSLog(@"list as a string: %@", str);
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
if (!data) NSLog(@"no data");
NSError *err = nil;
NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];
NSLog(@"count: %lu", (unsigned long)[arr count]);
}
Это выход:
список в виде строки: [{ "ID": "1", "имя": "Пример название" , "filename": "image.png"}]
count: 0
Каким может быть массив 0? В массиве явно есть один элемент.
Я не хочу излишне усложнять это сообщение, но это может быть важно, так что здесь. Строка, которая передается в эту функцию, возвращается сервером в зашифрованном формате. Поэтому, прежде чем она будет передана здесь, он первым проходит через процесс дешифрования, который выглядит следующим образом:
- (NSString *) decryptBase64EncodedString : (NSString *) base64EncodedCipherTextString
base64EncodedIvString : (NSString *) base64IvString
{
NSData *cipherData = [[NSData alloc] initWithBase64EncodedString:base64EncodedCipherTextString options:0];
NSData *ivData = [[NSData alloc] initWithBase64EncodedString:base64IvString options:0];
NSData *data = [self AES128Operation : kCCDecrypt
cipherTextData : cipherData
ivData : ivData];
NSString *decrypted = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return decrypted;
}
Я не думаю, что внутренности этой функции важно, так много, кроме, возможно, последние две строки, которые укажите, как эта строка создается (из NSData). Это может быть ни здесь, ни там, но основное преобразование в NSArray кажется настолько простым, что здесь должно быть что-то большее. (если не ясно, строка «расшифрована» - это то, что передается в «parseList»)
В первом блоке кода, который вы отправили, 'arr' is' nil'. В этом случае log 'err', чтобы вы могли понять, в чем проблема. – rmaddy
Вы правы. Не могу поверить, что я этого не замечал. Ошибка заключается в следующем: 'Error Domain = NSCocoaErrorDomain Code = 3840" Операция не может быть завершена (ошибка Cocoa 3840.) "(Garbage at end.)'. Там должны быть некоторые непечатаемые символы. Теперь, как определить и удалить их ... – Alex
Извините, мозг. Массивы используют квадратные скобки в JSON. Неважно. – rmaddy