【问题标题】:IOS: Dictionary Return null value/DataIOS:字典返回空值/数据
【发布时间】:2016-03-14 06:39:39
【问题描述】:

在我的项目中,我使用 JSON 解析来显示数据,为此我创建了 2 个 NSDictionary 字典 1 返回成功响应,但是当我在第二个字典中调用它时,它返回 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)

【问题讨论】:

  • 您是否初始化了您的诊断字典?为什么你为这个 dic 设置键是“data[Users][ref_id]”。这是一个字符串,而不是值。
  • 看起来 diagnosticdict 没有初始化。它甚至不是打印对象和内存位置。根据 JSON,没有 data[Users][ref_id] 键。请用户link分析JSON对象。
  • @CongTran data[Users][ref_id] 是一个请求参数,我借助它来获取 API 响应

标签: ios json dictionary nsdictionary


【解决方案1】:

替换这个

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

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

【讨论】:

    【解决方案2】:

    dict6 中没有“data[Users][ref_id]”的条目。

    顺便说一句,使用该字符串作为键是完全没有意义的。在这种情况下,键只是一个字符串,而不是字典中的一系列访问。

    看来你想要的是dict6[@"data"][@"Users"][@"ref_id"]

    但是,这也会失败,因为dict6 中没有“数据”条目。

    您的cleanJSONToObject: 方法可能正在剥离“数据”键的值。但是,根据您的声明,即打印 dict6 的值会给出正确的响应,我假设您实际想要访问的是“DiagnosesHospitals”中“id”的值,因为它听起来最像“ref_id” .

    根据调试器的输出,您似乎有一个字典 (dict6),其中一个“诊断”键指向一个包含两个字典的数组。

    因此,假设“id”是一个字符串(我不确定为什么它周围没有引号),您可以使用dict6[diagnoses][0][@"DiagnosesHospitals"][@"id"] 访问“id”字段。

    【讨论】:

      【解决方案3】:

      你可以得到的东西:

      NSDictionary * diagnoses = dict6[@"diagnoses"];
      NSString * diagnosis_name = diagnoses[0][@"Diagnoses"][@"diagnosis_name"];
      NSDictionary * diagnosisdict = diagnoses[0][@"DiagnosesHospitals"];
      NSString * hospital_id = diagnosisdict[@"hospital_id"];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-01
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        • 2021-04-22
        • 1970-01-01
        相关资源
        最近更新 更多