NSDictionary 展平层次结构

Posted

技术标签:

【中文标题】NSDictionary 展平层次结构【英文标题】:NSDictionary flatten hierarchy 【发布时间】:2012-12-08 17:24:01 【问题描述】:

我有一个像这样的 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;
;

【问题讨论】:

顺便希望访问令牌数据无效。 你的字典和数据键是什么? 你的字典格式不对 NSDictionary *result = [dictionary objectForKey:@"data"]; 【参考方案1】:
NSDictionary *dataDict = [mainDict  objectForKey:@"data"];

【讨论】:

Doesnt work.... 我得到 *** Terminating app due to unaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 尝试插入 nil object from objects[0]' *** 首先抛出调用堆栈: 这不会产生平面字典 @Imme22009 那么你并没有准确地给出你的字典有什么 正如我所说,这不会把它弄平。这将导致一个带有键字典的字典,其值为 dataDict @Daij-Djan 现在还好吗.. 你不认为他有错误的 dict 对象吗.. 在字典中你有 key : value 而不是 key = value【参考方案2】:

您的示例中的平面字典:

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

【讨论】:

@InderKumarRathore 是的,我知道。我不确定他是否想要一份副本或其他什么:D 我编辑了我的答案【参考方案3】:

它看起来不像“数据”是一个 NSDictionary。试试

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

它说了什么?

【讨论】:

【参考方案4】:

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

- (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];

【讨论】:

以上是关于NSDictionary 展平层次结构的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hive/Pig/MapReduce 展平递归层次结构

Hive - 将层次结构表展平为级别

将邻接列表层次结构展平为所有路径的列表

如何创建参数化递归 CTE 以展平标量函数中的层次结构?

具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?

r JSON到CSV转换器。使用`jsonlite` R包,展平所有层次结构并将所有剩余的列表/数组转换为strin