美文网首页
简单清除NSDictionary/NSArray中的NSNull

简单清除NSDictionary/NSArray中的NSNull

作者: 健了个平_24 | 来源:发表于2020-01-07 20:19 被阅读0次

服务器返回的JSON数据,通过NSJSONSerialization转成的NSDictionary有可能会包含NSNull类型的对象,如果直接使用NSNull就会导致程序崩溃,所以简单写了个小算法来清除NSDictionary/NSArray中的NSNull。

// 移除集合中的NSNull
- (id)removeNull:(id)object {
    if ([object isKindOfClass:NSDictionary.class]) {
        NSMutableDictionary *dic = [object mutableCopy];
        [dic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
            if ([obj isKindOfClass:NSDictionary.class] ||
                [obj isKindOfClass:NSArray.class] ||
                [obj isKindOfClass:NSNull.class]) {
                dic[key] = [self removeNull:obj];
            }
        }];
        object = dic.copy;
    } else if ([object isKindOfClass:NSArray.class]) {
        NSMutableArray *array = [object mutableCopy];
        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([obj isKindOfClass:NSDictionary.class] ||
                [obj isKindOfClass:NSArray.class] ||
                [obj isKindOfClass:NSNull.class]) {
                array[idx] = [self removeNull:obj];
            }
        }];
        object = array.copy;
    } else if ([object isKindOfClass:NSNull.class]) {
        object = @""; // 将NSNull换成空字符
    }
    return object;
}

测试一下:

NSDictionary *dic = @{@"0": [NSNull null],
                      @"1": @[@0,
                              @{@"0": [NSNull null],
                                @"1": @[@0, @1, @2, [NSNull null]],
                                @"2": @{@"00": @"00", @"11": @[@0, @1, @2, [NSNull null]]},
                                @"3": @"3"},
                              @2,
                              [NSNull null]],
                       @"2": @{@"00": @"00", @"11": @[@0, @1, @2, [NSNull null]]},
                       @"3": @"3"};
NSLog(@"清除前 %@", dic);
dic = [self removeNull:dic];
NSLog(@"清除后 %@", dic);

看一下打印结果

清除前: 清除前 清除后: 清除后

好像可行~暂时就酱吧

PS:服务器一般返回的集合都是字典和数组类型,NSIndexSet就先不考虑了,如果有就加上NSIndexSet的类型判断吧。

相关文章

网友评论

      本文标题:简单清除NSDictionary/NSArray中的NSNull

      本文链接:https://www.haomeiwen.com/subject/ieydactx.html