在 Objective-C 中检查来自 Json 响应的空值

Posted

技术标签:

【中文标题】在 Objective-C 中检查来自 Json 响应的空值【英文标题】:Checking a null value from Json response in Objective-C 【发布时间】:2013-05-21 10:53:46 【问题描述】:
[
  
    "AT" : null,
    "EA" : null,
    "AD2" : "",
    "OP" : null,
    "AdsLst" : [

    ],
    "EMs" : null,
    "ND" : 
      "MN" : null,
      "FN" : "Sony",
      "LN" : "J"
    ,
    "ZP" : "23456",
    "CT" : 1,
    "PP" : 0,
    "cId" : 161464,
    "Pos" : null,
    "WPExt" : null,
    "OS" : 0,
    "HP" : "(345) 678-7890",
    "BTTC" : 0,
    "PWD" : null,
    "UId" : 627,
    "DId" : 0,
    "UN" : null,
    "CY" : "Salt lake",
    "Comp" : null,
    "PMC" : 0,
    "AEa" : null,
    "AnD" : null,
    "DOB" : "1\/05\/1979",
    "IDel" : false,
    "ST" : "UH",
    "AD" : "2345 Symonds street",
    "Mob" : null,
    "WP" : "(234) 324-6576",
    "PL" : 0,
    "Potcus" : false
  ,
  
    "AT" : null,
    "EA" : null,
    "AD2" : "",
    "OP" : null,
    "AdsLst" : [

    ],
    "EMs" : null,
    "ND" : 
      "MN" : null,
      "FN" : "Augustine",
      "LN" : "Gomes"
    ,
    "ZP" : "43567",
    "CT" : 1,
    "PP" : 0,
    "cId" : 161466,
    "Pos" : null,
    "WPExt" : null,
    "OS" : 0,
    "HP" : "(456) 457-6588",
    "BTTC" : 0,
    "PWD" : null,
    "UId" : 627,
    "DId" : 0,
    "UN" : null,
    "CY" : "test",
    "Comp" : null,
    "PMC" : 0,
    "AEa" : null,
    "AnD" : null,
    "DOB" : null,
    "IDel" : false,
    "ST" : "AZ",
    "AD" : "2345 test",
    "Mob" : null,
    "WP" : "(678) 987-0890",
    "PL" : 0,
    "Potcus" : false
  ,
  
    "AT" : null,
    "EA" : null,
    "AD2" : "",
    "OP" : null,
    "AdsLst" : [

    ],
    "EMs" : null,
    "ND" : 
      "MN" : null,
      "FN" : "Jenny",
      "LN" : "X"
    ,
    "ZP" : "45678",
    "CT" : 1,
    "PP" : 0,
    "cId" : 161467,
    "Pos" : null,
    "WPExt" : null,
    "OS" : 0,
    "HP" : "(435) 644-6545",
    "BTTC" : 0,
    "PWD" : null,
    "UId" : 627,
    "DId" : 0,
    "UN" : null,
    "CY" : "Sallas",
    "Comp" : null,
    "PMC" : 0,
    "AEa" : null,
    "AnD" : null,
    "DOB" : null,
    "IDel" : false,
    "ST" : "TX",
    "AD" : "2433 Main street",
    "Mob" : null,
    "WP" : "(657) 656-8798",
    "PL" : 0,
    "Potcus" : false
  ,
  
    "AT" : null,
    "EA" : null,
    "AD2" : "",
    "OP" : null,
    "AdsLst" : [

    ],
    "EMs" : null,
    "ND" : 
      "MN" : null,
      "FN" : "BLVD Cont F1",
      "LN" : "Blvd Contact L1"
    ,
    "ZP" : "",
    "CT" : 1,
    "PP" : 0,
    "cId" : 161473,
    "Pos" : null,
    "WPExt" : null,
    "OS" : 0,
    "HP" : null,
    "BTTC" : 0,
    "PWD" : null,
    "UId" : 627,
    "DId" : 0,
    "UN" : null,
    "CY" : "",
    "Comp" : null,
    "PMC" : 0,
    "AEa" : null,
    "AnD" : null,
    "DOB" : null,
    "IDel" : false,
    "ST" : "",
    "AD" : "",
    "Mob" : null,
    "WP" : null,
    "PL" : 0,
    "Potcus" : false
  ,

在此响应中,我只想显示 "FN","LN","CT","PP","cId","Pos","AT","EA","AD2" 这些标签值。 ...然后哪个是空值只想显示“Apple”....

谁能帮帮我

我的代码是

- (void)connectionDidFinishLoading:(NSURLConnection *)connection


    NSError *error;
    json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSLog(@"json.... %@",json);


    id jsonObject = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];

    NSLog(@"jsonObject=%@", jsonObject);

    NSDictionary *checkArray=[jsonObject valueForKey:@"ND"];


    cheDisk=[checkArray valueForKey:@"FN"];
    cheDisk1=[checkArray valueForKey:@"LN"];

    NSLog(@"FN =%@",cheDisk);
    NSLog(@"LN =%@",cheDisk1);


【问题讨论】:

呃,if (object == nil) text = @"Apple"; 怎么样? 我不确定我是否理解你想要做什么? 是的...我想显示 "FN","LN","CT","PP","cId","Pos","AT","EA","AD2 " 这些标签值......然后如果 null 意味着只显示 "Apple" 字符串 @sivakumar 看到我的回答对我有用 ***.com/questions/4839355/… 【参考方案1】:

试试

   objectForKey will return nil if a key doesn't exist


  Symbol    Value            Meaning
  =======   =============   =========================================
   NULL     (void *)0       literal null value for C pointers
   nil      (id)0           literal null value for Objective-C objects
   Nil      (Class)0        literal null value for Objective-C classes
  NSNull    [NSNull null]   singleton object used to represent null


  NSString *strOP = [results objectForKeyOrNil:@"OP"];

 - (id)objectForKeyOrNil:(id)key 
     id val = [self objectForKey:key];
     if ([val isEqual:[NSNull null]] || val==nil) 
         return nil;
     

     return val;
 

【讨论】:

【参考方案2】:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection



    NSError *error;
    json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSLog(@"json.... %@",json);


    id jsonObject = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];

    NSLog(@"jsonObject=%@", jsonObject);

    NSDictionary *checkArray=[json valueForKey:@"ND"];


    NSArray *tel = [checkArray valueForKey:@"FN"];



    for (id photo in tel)
    
        if (photo == [NSNull null])
        
            // photo is null

        
        else
        
            // photo isn't null. It's an array
            NSArray *innerPhotos = photo;
            NSLog(@"photo... %@",innerPhotos);
        

    



    cheDisk1=[checkArray valueForKey:@"LN"];

    NSLog(@"FN =%@",tel);


    [ContactTableview reloadData];



【讨论】:

【参考方案3】:

你可以使用:

if (cheDisk isKindOfClass:[NSNull class]) 
    // cheDisk is null

【讨论】:

【参考方案4】:

试试这个代码:

cheDisk=[checkArray valueForKey:@"FN"];
        cheDisk1=[checkArray valueForKey:@"LN"];.

    if([cheDisk isEqualToString:@"null"])
        cheDisk = @"Apple";
    
    if([cheDisk1 isEqualToString:@"null"])
        cheDisk1 = @"Apple";
    


        NSLog(@"FN =%@",cheDisk);
        NSLog(@"LN =%@",cheDisk1);

【讨论】:

以上是关于在 Objective-C 中检查来自 Json 响应的空值的主要内容,如果未能解决你的问题,请参考以下文章

来自 Objective-C 中 URL 的数组

从JSON数组objective-c获取值的问题

如果json数据(来自后端)具有角度键值,如何检查条件

swift 如何检查来自 Json 的 NULL 值

检查来自 API 的响应是不是为有效 JSON

Objective-C:如何在 JSON 中读取 JSON?