美文网首页
简单清除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