首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >含有NSNull的NSDictionary *

含有NSNull的NSDictionary *
EN

Stack Overflow用户
提问于 2016-02-17 17:21:45
回答 2查看 1.1K关注 0票数 0

我正在编写代码,以如下方式解析json响应:

代码语言:javascript
复制
 NSDictionary* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
 if (jsonArray == nil) {
            // returns empty array
            return layouts;
 }
 NSDictionary* sections = [jsonArray valueForKey:@"section"];
 for (NSDictionary* section in sections) {

不幸的是,“节”有时是空的,我的结果是一个__NSArrayI *,它包含一个元素- NSNull *。这将导致for循环在异常情况下失败。我怎么才能修好它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 17:29:47

我以前在NSDictionary扩展上有一个清理方法,它帮助我解决了这个问题。基本上,该方法遍历字典中的所有键,删除与NSNull()匹配的任何值,返回一个“干净”的字典和数组。诀窍是,您还必须通过嵌套字典进行递归。所以,在伪代码中,它看起来如下所示:

代码语言:javascript
复制
func cleanup() -> NSDictionary {
    let newDictionary = NSDictionary()
    for key in dictionary.copy {
        if dictionary[key] is NSDictionary {
            newDictionary[key] = dictionary[key].cleanup()
        } else if dictionary[key] is NSArray {
            newDictionary[key] = dictionary[key].filter( $0 != NSNull() )
        } else if dictionary[key] !=  NSNull() {
            newDictionary[key] = dictionary[key]
        }
    return newDictionary
}

希望这能有所帮助!

票数 3
EN

Stack Overflow用户

发布于 2016-02-17 21:09:51

只需将此函数添加到解析器并调用它即可。

代码语言:javascript
复制
- (id)objectForKeyNotNull:(NSString*)key inDict:(NSDictionary*)map {
    id object = [map objectForKey:key];
    if (object == [NSNull null])
        return nil;
      else
        return object;
}

然后,您可以在解析器中这样调用它:

代码语言:javascript
复制
 // will set myObject to nil if it is null in the JSON response
 myObject = [self objectForKeyNotNull:@"keyNameInDict" inDict:yourDictionary]; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35463496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档