iOS去除网络请求到的数据的null值
2015-12-18 13:37
323 查看
请求接口获取到的数据包涵null值,处理的时候遇到了问题。
在网上搜到了几种解决办法,自己尝试了两种都可以达到目的,在这里记录一下。
第一种方法是使用分类给字典添加一个类方法,将字典中的null值全部替换为空字符串,代码如下:
.h文件代码:
.m文件代码:
在网上搜到了几种解决办法,自己尝试了两种都可以达到目的,在这里记录一下。
第一种方法是使用分类给字典添加一个类方法,将字典中的null值全部替换为空字符串,代码如下:
.h文件代码:
#import <Foundation/Foundation.h> @interface NSDictionary (DeleteNull) +(id)changeType:(id)myObj; @end
.m文件代码:
#import "NSDictionary+DeleteNull.h" @implementation NSDictionary (DeleteNull) #pragma mark - 私有方法 //将NSDictionary中的Null类型的项目转化成@"" +(NSDictionary *)nullDic:(NSDictionary *)myDic { NSArray *keyArr = [myDic allKeys]; NSMutableDictionary *resDic = [[NSMutableDictionary alloc]init]; for (int i = 0; i < keyArr.count; i ++) { id obj = [myDic objectForKey:keyArr[i]]; obj = [self changeType:obj]; [resDic setObject:obj forKey:keyArr[i]]; } return resDic; } //将NSDictionary中的Null类型的项目转化成@"" +(NSArray *)nullArr:(NSArray *)myArr { NSMutableArray *resArr = [[NSMutableArray alloc] init]; for (int i = 0; i < myArr.count; i ++) { id obj = myArr[i]; obj = [self changeType:obj]; [resArr addObject:obj]; } return resArr; } //将NSString类型的原路返回 +(NSString *)stringToString:(NSString *)string { return string; } //将Null类型的项目转化成@"" +(NSString *)nullToString { return @""; } #pragma mark - 公有方法 //类型识别:将所有的NSNull类型转化成@"" +(id)changeType:(id)myObj { if ([myObj isKindOfClass:[NSDictionary class]]) { return [self nullDic:myObj]; } else if([myObj isKindOfClass:[NSArray class]]) { return [self nullArr:myObj]; } else if([myObj isKindOfClass:[NSString class]]) { return [self stringToString:myObj]; } else if([myObj isKindOfClass:[NSNull class]]) { return [self nullToString]; } else { return myObj; } } @end
使用方法:
[model setValuesForKeysWithDictionary:[NSDictionary changeType:dict]];
第二种方法是利用AFNetworking的自动解析,去除掉值为null的键值对,代码如下:
_manager = [AFHTTPRequestOperationManager manager]; AFJSONResponseSerializer *response = [AFJSONResponseSerializer serializer]; response.removesKeysWithNullValues = YES; _manager.responseSerializer = response; _manager.requestSerializer = [AFJSONRequestSerializer serializer];
相关文章推荐
- windows TCP socket在C++下的编程入门 2
- CentOS---网络配置详解
- iOS开发网络篇—多线程断点下载
- 使用Apache HttpClient4.x 发送 GET POST 请求
- php http 缓存(客户端缓存)
- Android Studio 编译不通过,报错“找不到org.apache.http
- Session
- TCP的流量控制和拥塞控制
- 中国自然语言处理开源组织https://github.com/NLPchina
- 简单的缓存代理HTTP服务器
- ios开发如何封装AFN第三方类库中的http请求
- Android Studio 添加 Volley开源网络框架
- TCP三次握手连接
- afnetworking3.0小试
- [网络] 大话IP地址
- Linux 网络配置(固定IP)
- 中小企业防御网络攻击的 6 种方法
- 微信公众号难倒了部分开发者:https证书由128位升级到256位,看到的赶紧升级吧
- GoDaddy万用https ssl证书如何通过DNS审核
- nodejs模块——http模块