去除後臺返回資料中的null

weixin_34208283發表於2016-06-08

後臺返回的資料格式由過去的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;
}

相關文章