如何在iphone中检查已解析元素的条件

时间:2011-04-19 08:50:55

标签: iphone json parsing

从我的项目中的Json解析我得到这些元素......

执行指令: -

NSArray *feed3 = (NSArray *)[feed valueForKey:@"type"];  
NSLog(@" %@",feed3);

在控制台中我得到了这个

  

(       状态,
      照片,
      链接,
      视频)

现在我想检查这些元素的条件..

喜欢

if(type==staus){  
//do some thing  
} 

如何在xcode中执行此操作?

2 个答案:

答案 0 :(得分:1)

我假设feed3是解析了您在另一个问题中列出的JSON数据后由JSON解析器返回的对象。在那种情况下:

* the top level object is an array
* every element in the array is an object/dictionary representing news
* this object/dictionary contains the following keys:
  * application (object/dictionary with two keys: id, name)
    * id (number)
    * name (string)
  * created_time (string)
  * from (object/dictionary with two keys: id, name)
    * id (number)
    * name (string)
  * icon (string)
  * id (string)
  * likes (object/dictionary with two keys: count, data)
    * count (number)
    * data (array)
      * every element in the array is an object/dictionary
      * this object/dictionary has two keys (id, name)
        * id (number)
        * name (string)
  * link (string)
  * name (string)
  * picture (string)
  * properties (array of objects/dictionaries)
  * type (string)
  * updated_time (string)

在解析JSON数据时,至关重要可以了解数据的组织方式。我建议你每当必须解析JSON时总是这样做。

由于您对'type'感兴趣,因此您需要遵循以下路径:

  • 遍历顶级新闻
    • 数组中的每个元素都是一个对象/字典
      • 此对象/词典有一个名为'type'的键

以下代码可以解决这个问题:

for (NSDictionary *news in feed3) {
    NSString *type = [news objectForKey:@"type"];

    if ([type isEqualToString:@"status"]) {
       …
    }
    else if ([type isEqualToString:@"photo"]) { 
       …
    }
    else if ([type isEqualToString:@"link"]) { 
       …
    }
    else if ([type isEqualToString:@"video"]) { 
       …
    }
}

请注意,一般情况下,您应使用-objectForKey:代替-valueForKey:

  • -objectForKey:NSDictionary中声明的方法,它用于获取存储在字典中的对象,并给出相应的密钥。
  • -valueForKey:是一种KVC方法,可用于其他目的。特别是,当你不期待它时,它可以返回一个数组!

答案 1 :(得分:0)

检查以下

for(int index = 0 ; index < [feed3 count] ; index++)
{
    NSString* tempString = [feed3 objectAtIndex:index];

    if([tempString isEqualToString:@"status"]) 
    {
      //Get value for status from value array
    }
    else if([tempString isEqualToString:@"photo"]) 
    {
      //Get value for photo from value array
    }
    else if([tempString isEqualToString:@"link"]) 
    {
      //Get value for link from value array
    }
    else if([tempString isEqualToString:@"video"]) 
    {
      //Get value for video from value array
    }
}