2015-12-09 2 views
-1

в моем проекте Я использую разбор JSON для отображения данных для этого я создал 2 Словарь NSDictionary 1 ответ возврата ответа, но когда я его вызываю во втором словаре, он возвращает значение Null. я делюсь мой код, пожалуйста, помогите мне исправить этоIOS: Словарь Возвращаемое значение null/Данные

-(void)hdata 
{ 



    NSString *post = [NSString stringWithFormat:@"data[Users][ref_id]=%@&api_key=bf45c093e542f057c123ae7d6",refidstr]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:@"http://192.168.0.20/hspCh/api/user_diagnose_list"]]; 

    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 

    NSURLResponse *response; 
    NSError *err; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 

    [request setHTTPBody:postData]; 

    NSString *str=[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding]; 
    NSLog(@"str : %@",str); 



    NSDictionary *dict6 = [self cleanJsonToObject:responseData]; 
    NSLog(@"str : %@",dict6); <=======it gives correct responce 



    diagnosisdict = [dict6 objectForKey:@"data[Users][ref_id]"]; 

    [diagnosisdict setValue:refidstr forKey:@"data[Users][ref_id]"]; 
    NSLog(@" for ref id =%@ , data is= %@",refidstr, diagnosisdict); <======Gives null responce 

} 

Вывод выше в консоли следующим образом

2015-12-09 10:34:16.935 HcH[2841:32315] str : {"response":200,"diagnoses":[{"DiagnosesHospitals":{"hospital_id":"3341","id":"163075","discharges":"100.00","charge_amt":"1200.00","total_amt":"1500.00","medicare_amt":"1200.00"},"Diagnoses":{"diagnosis_name":"TRANSIENT ISCHEMIA"}}]} 
2015-12-09 10:34:16.935 HcH[2841:32315] str : { 
    diagnoses =  (
       { 
      Diagnoses =    { 
       "diagnosis_name" = "TRANSIENT ISCHEMIA"; 
      }; 
      DiagnosesHospitals =    { 
       "charge_amt" = "1200.00"; 
       discharges = "100.00"; 
       "hospital_id" = 3341; 
       id = 163075; 
       "medicare_amt" = "1200.00"; 
       "total_amt" = "1500.00"; 
      }; 
     } 
    ); 
    response = 200; 
} 
2015-12-09 10:34:16.936 HcH[2841:32315] for ref id =3341 , data is= (null) 
+0

ли вы инициализировать Ваш diagnosisdict? И почему вы установили ключ для этого dic: «data [Users] [ref_id]». Это строка, а не значение. –

+1

Похоже, что dictdict не инициализирован. Это даже не объект печати и местоположение памяти. В зависимости от JSON нет данных [Пользователи] [ref_id]. Попросите пользователя [link] (http://www.jsoneditoronline.org/) проанализировать объекты JSON. – Savitha

+0

@ Данные CongTran [Пользователи] [ref_id] - это параметр запроса, с помощью которого я возвращаю ответ API –

ответ

2

Заменить этот

diagnosisdict = [dict6 objectForKey:@"data[Users][ref_id]"]; 

с

diagnosisdict = [[[dict6 objectForKey:@"diagnoses"] objectAtIndex:0] objectForKey:@"DiagnosesHospitals"]; 
1

Там нет записи в dict6 для «данных [Пользователи] [ref_id] ».

Использование этой строки в качестве ключа совершенно бессмысленно, кстати. Ключ в этом контексте - это просто строка, а не серия обращений в словарях.

Кажется, что вы хотите dict6[@"data"][@"Users"][@"ref_id"].

Однако это также не сработает, потому что нет записи для «данных» в dict6.

Возможно, ваш метод cleanJSONToObject: лишает значение ключа данных. Однако, исходя из вашего утверждения о том, что печать значения dict6 дает правильный ответ, я предполагаю, что то, что вы на самом деле хотите получить, - это значение «id» в «DiagnosisHospitals», поскольку оно больше похоже на «ref_id».

Основываясь на выходе отладчика, кажется, что у вас есть словарь (dict6) с ключом «диагнозы», указывающий на массив с двумя словарями.

Итак, вы получите доступ к полю «id» с помощью dict6[diagnoses][0][@"DiagnosesHospitals"][@"id"], считая, что «id» - это строка (я не уверен, почему у нее нет кавычек вокруг нее).

1

Somethings, что вы можете получить:

NSDictionary * diagnoses = dict6[@"diagnoses"]; 
NSString * diagnosis_name = diagnoses[0][@"Diagnoses"][@"diagnosis_name"]; 
NSDictionary * diagnosisdict = diagnoses[0][@"DiagnosesHospitals"]; 
NSString * hospital_id = diagnosisdict[@"hospital_id"]; 
Смежные вопросы