2016-03-04 5 views
0

Я пытаюсь проанализировать объект ответа из AFNetworking. Я смог сохранить результаты responseObject в объекте NSDictionary, называемом getData, но я проверил его с помощью точки останова, и getData просто содержит кучу строк. Кто-нибудь знает, как я могу извлечь данные?Невозможно разобрать json из ответа AFNetworkingObject iOS

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
NSSet *acceptableTypes = [NSSet setWithObjects:@"application/json", @"text/plain", nil]; 
manager.responseSerializer.acceptableContentTypes = acceptableTypes; 

__block NSDictionary *getData; 
__block NSMutableArray *filenames = [[NSMutableArray alloc] init]; 

[manager GET:URLString parameters:parameters 
    success:^(AFHTTPRequestOperation *operation, id responseObject) 
{ 
    NSLog(@"responseObject: %@", responseObject); 
    NSLog(@"operation.responseString: %@",operation.responseString); 
    NSLog(@"operation.response: %@",operation.response); 
    self.downloadSuccess = YES; 

    getData = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]; 
    NSLog(@"size: %lu", (unsigned long)getData.count); 

} 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) 
{ 
    NSLog(@"Error [getDataFromServer]: %@", error); 
    NSLog(@"Error Response --> %@",operation.responseString); 
    self.downloadSuccess = NO; 
}]; 

Вот изображение того, как выглядят строки в getData.

Content of getData after getting data from responseObject

+0

Обычно, если ваш сервер устанавливает правильный заголовок, тогда responseObject должен быть расшифрован JSON, поэтому это NSArray или NSDictionary. – Andy

+0

Какие данные вы пытаетесь выбраться из строк? – dan

+0

вы можете напрямую получить доступ к объекту ответа в качестве словаря, так как afnetworking уже разобран. 'http://stackoverflow.com/a/35723726/3463712' проверить ответ, вы можете получить представление. – Max

ответ

0

reponseObject является идентификатор, так что в конце концов будет NSDictionnary. Вы можете разобрать его так:

YourVariable = [responseObject objectForKey:(@"yourKey")]; 
+0

Я пытался сделать это, используя свой объект NSMutableArray, называемый именами файлов, такими как: filenames = [responseObject objectForKey: @ "filename"]; но я получаю сообщение об ошибке. Он говорит, что responseObject содержит NSInlineData и содержит 0 пар ключ/значение и как селектор «objectForKey» непризнан для NSInlineData – km786

+0

просто идея, но попытайтесь использовать NSDictionnary вместо NSMutableDictionnary и скажите мне результат. edit: OK Я только что видел, что вы уже пытаетесь использовать nsdictionnary my bad –

+0

Можете ли вы дать нам отпечаток объекта ответа? поместите метку отладки (синий тег, когда вы нажмете слева от строки), и попробуйте проверить в отладчике, что такое responseObject и что он заполняет. –

0

пытаются использовать,

getdata = [[NSDictionary alloc] initWithDictionary: responseObject]; 

, а затем проверить.

+0

Я опробовал ваше предложение и протестировал его, но я получаю эту ошибку: «NSInvalidArgumentException», причина: «*** - [NSDictionary initWithDictionary: copyItems :]: словарь аргумент не NSDictionary '.Он также говорит, что responseObject - это NSInlineData, а getData - это nil – km786

+0

. Попробуйте придумать метод responseObject в NSDictionary, например data = [[NSDictionary alloc] initWithDictionary: (NSDictionary *) responseObject]; – JigneshP

0

Спасибо всем за вашу помощь. Наконец я понял, что происходит. Этот метод предназначен для загрузки файлов из внешней базы данных. Каждый файл имеет идентификатор. Список странной строки, которую я получал (что я показал на скриншоте), был фактически списком идентификаторов для всех файлов, которые были загружены пользователем. Чтобы получить данные из определенного файла, мне нужно сделать второй вызов GET, используя этот конкретный идентификатор в качестве параметра. В коде, который я предоставил, я не показывал, как список параметров. Вот список параметров, которые я использую для первого GET вызова:

NSDictionary *parameters = @{@"username" : login.username, @"password" :  login.password}; 

Вот список параметров, которые я использую для второго GET вызова:

NSDictionary *parameters = @{@"username" : login.username, @"password" : login.password, @"id" : @"20160310113730268IDO"}; 

С второго GET вызова с помощью этот id, теперь я могу получить данные этого файла.

Смежные вопросы