美文网首页
去除后台返回数据中的null

去除后台返回数据中的null

作者: 谁在弹奏一曲东风破 | 来源:发表于2016-06-08 01:41 被阅读719次

    后台返回的数据格式由过去的json与xml并存的时代,变成了现在的以json为主,xml几乎不存在的年代,json是每一个移动端程序猿每次与接口打交道都会遇到的数据格式,在这个过程中好的接口返回格式固然很好,但是也不能排除一些特例的情况,如接口字段中存在null的情况;

    例子
       { "userName": null,
         "userImage":null,
         "token":null}
    

    如这样的返回数据,一定让开发者头疼,这个时候,它从严格意义上来讲是一个正确的数据段,但却不是我们想要的,我们可以通过转换的方式来进行解决将其中的null转换成空

    如果只是简单的json格式,不包含复杂的数组,字典。可以通过以下方法进行转化(已验证有效性)

    - (NSDictionary*)transforeNullValueInSimpleDictionaryToBlankString:(id)originJson{
    // 判断originJson是不是一个有效的字符串
    if (![NSJSONSerialization isValidJSONObject:originJson]) {
        return nil;
    }
    NSDictionary *originDic = (NSDictionary*)originJson;
    NSMutableDictionary *translatedDic = [NSMutableDictionary dictionary];
    
    [originDic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        if ([obj isKindOfClass:[NSNull class]]) {
            [translatedDic setObject:@"" forKey:key];
        }else{
            [translatedDic setObject:obj forKey:key];
        }
    return translatedDic;
    

    }

    如果包含复杂的格式,如字段包含数组或者字典,就可以采取下面的进行修复(没有测试,可能需要修改,仅提供参考)

    - (NSDictionary*)transforeNullValueInDictionaryToBlankString:(id)originJson{
    // 判断originJson是不是一个有效的字符串
    if (![NSJSONSerialization isValidJSONObject:originJson]) {
        return nil;
    }
    NSDictionary *originDic = (NSDictionary*)originJson;
    NSMutableDictionary *translatedDic = [NSMutableDictionary dictionary];
    
    [originDic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        BOOL isNull = NO;
        BOOL isArray = NO;
        BOOL isDic = NO;
        if ([obj isKindOfClass:[NSNull class]]) {
            [translatedDic setObject:@"" forKey:key];
            isNull = YES;
        }
        
        if ([obj isKindOfClass:[NSArray class]]) {
            NSMutableArray *tempArray = [NSMutableArray array];
            for (id __strong content in obj) {
                if ([content isKindOfClass:[NSNull class]]) {
                    [tempArray addObject:@""];
                }
                
                if ([content isKindOfClass:[NSArray class]]) {
                
                   [tempArray addObject: [self transformNullValueInArrayToBlankString:content]];
                }
            }
            [translatedDic setObject:tempArray forKey:key];
            isArray = YES;
        }
        
        if ([obj isKindOfClass:[NSDictionary class]]) {
            NSDictionary *tempDic;
            tempDic = [self transforeNullValueInDictionaryToBlankString:obj];
            isDic = YES;
            [translatedDic setObject:tempDic forKey:key];
        }
        
        if (isNull || isArray || isDic) {
            
        }else{
            [translatedDic setObject:obj forKey:key];
        }
    }];
    
        return translatedDic;
    }
    
    - (NSArray*)transformNullValueInArrayToBlankString:(NSArray*)originArray{
    NSMutableArray *tempArray = [NSMutableArray array];
    for (id __strong content in originArray) {
        if ([content isKindOfClass:[NSNull class]]) {
            [tempArray addObject:@""];
        }
        
        if ([content isKindOfClass:[NSDictionary class]]) {
            [tempArray addObject:[self transforeNullValueInDictionaryToBlankString:content]];
        }
        
        if ([content isKindOfClass: [NSArray class]]) {
            [tempArray addObject:[self transformNullValueInArrayToBlankString:content]];
        }
    }
        return (NSArray*)tempArray;
    }
    

    相关文章

      网友评论

          本文标题:去除后台返回数据中的null

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