2013-12-13 3 views
-1

Я получаю json-массив с сервера. Объект jsonOutput показывает 2 объекта правильно. Но я не могу отображать или извлекать данные. Может ли кто-нибудь помочь мне. Я попытался следующим образом:Невозможно прочитать данные после NSJSONSerialization

for (id key in jsonOutput) { 
      NSLog(@"key: %@, value: %@", key, [jsonOutput objectForKey:key]); 
     } 

декларация: NSDictionary * jsonOutput;

actualmethods:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
    { 
     data=[[NSMutableData alloc] init]; 
    } 

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData 
    { 
     [data appendData:theData]; 


     // if ([connection isEquals:connect1]){ 
      // this is request urlConnectionRecsender 
     // } 
    } 

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection 
    { 

    jsonOutput= [NSJSONSerialization JSONObjectWithData:data options:nil error:nil]; 


    for (id key in jsonOutput) { 
      NSLog(@"key: %@, value: %@", key, [jsonOutput objectForKey:key]); 
     } 

    } 
+0

Вы могли бы передать в переменной ошибки и проверить, что объект. Если ошибка не записывается в переменную, проверьте, есть ли у вас массив или словарь. – vikingosegundo

ответ

1

Попробуйте

NSError * ошибка;

jsonOutput= [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

if(error) 
    NSLog(@"%@",error.description); 

Если вы не знаете, что тип ответа, то это всегда хорошая практика, чтобы проверить respone тип первой

id responseObj = [NSJSONSerialization 
         JSONObjectWithData:data 
         options:kNilOptions 
         error:&error]; 
    if ([responseObj isKindOfClass:[NSArray class]]) { 
     //Your response is a array 
    } 
    else if([responseObj isKindOfClass:[NSDictionary class]]) { 
     //Your response is a dictionary 
    } 

Ваш массив содержит NSDictionary

{ cropName = corn; cropOrderId = 1; cropPrice = 100; "farmer_id" = 1; orderStatus = pending; quantity = 5; } 

использовать эту код для получения значения

for(NSDictionary*dict in jsonObject) { 

    NSArray *allKeysarr = [dic allKeys]; 

    for(NSString *key in allKeysarr) { 

     NSLog(@"%@",[dic valueForKey:key]); 
    } 

} 
+0

Нет, он не работает с той же ошибкой - [__ NSCFArray objectForKey:]: непризнанный селектор, отправленный в экземпляр 0x7518aa0 – user2569524

+0

. Затем вы отвечаете за массив. Сделать jsonOutput NSArray –

+0

Я использовал приведенный выше код и его массив. но все же я получаю ошибку даже после изменения типа массива. используя для (ключ id в jsonOutput) { NSLog (ключ); } – user2569524

0

первого использования обработка ошибок:

NSError *error; 
jsonOutput= [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
if (error) NSLog(@"error: %@",error.description); 

затем значение доступа с:

NSString *value1 = [jsonOutput objectForKey:@"YOUR_KEY1"]; 
0

NSData * XMLDATA = [NSData dataWithContentsOfFile: xmlPath];

NSError *jsonError = nil; 
id jsonObject = [NSJSONSerialization JSONObjectWithData:xmlData options:kNilOptions error:&jsonError]; 

if ([jsonObject isKindOfClass:[NSArray class]]) { 
    NSLog(@"its an array!"); 
    NSArray *jsonArray = (NSArray *)jsonObject; 
    NSLog(@"jsonArray - %@",jsonArray); 
} 
else { 
    NSLog(@"its probably a dictionary"); 
    NSDictionary *jsonDictionary = (NSDictionary *)jsonObject; 
    NSLog(@"jsonDictionary - %@",jsonDictionary); 
} 

Попробуйте один раз

+0

if (ошибка) { NSLog (@ "% @", ошибка); } –

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