去除后臺返回數(shù)據(jù)中的null

后臺返回的數(shù)據(jù)格式由過去的json與xml并存的時代,變成了現(xiàn)在的以json為主,xml幾乎不存在的年代,json是每一個移動端程序猿每次與接口打交道都會遇到的數(shù)據(jù)格式,在這個過程中好的接口返回格式固然很好,但是也不能排除一些特例的情況,如接口字段中存在null的情況;

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

如這樣的返回數(shù)據(jù),一定讓開發(fā)者頭疼,這個時候,它從嚴格意義上來講是一個正確的數(shù)據(jù)段,但卻不是我們想要的,我們可以通過轉(zhuǎn)換的方式來進行解決將其中的null轉(zhuǎn)換成空

如果只是簡單的json格式,不包含復雜的數(shù)組,字典??梢酝ㄟ^以下方法進行轉(zhuǎn)化(已驗證有效性)

- (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;

}

如果包含復雜的格式,如字段包含數(shù)組或者字典,就可以采取下面的進行修復(沒有測試,可能需要修改,僅提供參考)

- (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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 14,299評論 0 15
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評論 18 399
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,332評論 6 13
  • 產(chǎn)品是給人用的,是為了滿足人的各種需求。所以我們在規(guī)劃運營策略時,應該以用戶需求為中心,以此作為決策的依據(jù)。 所以...
    韓敘閱讀 699評論 4 10

友情鏈接更多精彩內(nèi)容