NSDictionary扁平化层次结构

时间:2012-12-08 17:24:01

标签: iphone objective-c ios xcode ipad

我有一个像这样的NSDictionary对象:

dictionary: {
    data =     {
        "access_token" = "xxx";
        "expires_in" = 00;
        "refresh_token" = "yyy";
        "token_type" = bearer;
    };
}

如何展平它以便删除“数据”对象?有快速的方法吗? 所以输出应该如下所示:

dictionary: {

        "access_token" = "xxx";
        "expires_in" = 00;
        "refresh_token" = "yyy";
        "token_type" = bearer;
};

提前致谢。

4 个答案:

答案 0 :(得分:1)

NSDictionary *dataDict = [mainDict  objectForKey:@"data"];

答案 1 :(得分:0)

你的例子中的扁平字典:

//grab data
NSDictionary *data = [yourDict objectForKey:@"data"];
assert(data != nil);
NSDictionary *flatDict = data; //OR data.copy // OR [NSDictionary dictionaryWithDictionary:data];

答案 2 :(得分:0)

看起来“数据”不是NSDictionary。试试

id what = [dict objectForKey : @"data"];
NSLog(@"%@", [what class]); 

它说什么?

答案 3 :(得分:0)

使用递归函数,这个方法的唯一问题是,如果嵌套字典中的密钥恰好相同,它将替换旧数据

- (NSDictionary *)flattedDictionary{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  for (NSString *key in self.allKeys) {
    id object = [self objectForKey:key];
    if (![object isKindOfClass:[NSDictionary class]] && !isNull(object)) {
        [dict setObject:object
                 forKey:key];
    } else if ([object isKindOfClass:[NSDictionary class]]){
        [dict addEntriesFromDictionary:[object flattedDictionary]];
    }
}
  return [NSDictionary dictionaryWithDictionary:dict];
}