检查NSdictionary - NESTED键是否为空

时间:2015-02-23 16:24:13

标签: ios objective-c null key nsdictionary

我正在提取json数据......并且无法改变它的出现方式

(案例1)大部分时间都是这样的

collection1 {

-paragraph { href:" x", 文字:" y" },

标题:"标题"

},

(案例2)有时它会像这样出现

段落:" y"

标题:"标题"

},

...

我这样做 - > NSString * paragraphText = [[postDictionary objectForKey:@" paragraph"] objectForKey:@" text"];

获取CASE 1中的数据

但对于案例2,我需要检查是否有NESTED键 - > [[postDictionary objectForKey:@" paragraph"] objectForKey:@" text"];存在

如果它没有那么只使用 - > [[postDictionary objectForKey:@"段落"]

我已经尝试了很多方法来检查密钥是否存在......即

  1. id obj = [[postDictionary objectForKey:@" paragraph"] objectForKey:@" text"];     if(obj == [NSNull null]){

  2. if(![[postDictionary objectForKey:@" paragraph"] objectForKey:@" text"])以及上述的其他变体......

  3. 我收到错误 - > [__NSCFString objectForKey:]:无法识别的选择器发送到实例0x145731f0'

    我知道钥匙不存在......

    如何检查嵌套密钥是否存在? ..这样我可以尝试另一个密钥访问数据?

2 个答案:

答案 0 :(得分:1)

检查段落的类型,如果它是字典的话,那么

id paragraph = postDictionary[@"paragraph"];
if([paragraph isMemberOfClass: [NSDictionary class]])
{
    // case 1
    NSString *textFromParagraph = ((NSDictionary*)paragraph)[@"text"];
}

答案 1 :(得分:0)

感谢Eike,Rishi和Adama。我最终做了

NSDictionary * paragraph = postDictionary [@“paragraph”];

    if ([paragraph isKindOfClass:[NSDictionary class]])
    {[@"text"];
        blogPost.content    = [[postDictionary objectForKey:@"paragraph"]  objectForKey:@"text"];
    }else{
        blogPost.content    = [postDictionary objectForKey:@"paragraph"];
    }

我学到了一些东西。

谢谢:D