第一种方法是使用分类给字典添加一个类方法,将字典中的null值全部替换为空字符串,代码如下:

.h文件代码:

@interface NSDictionary (DeleteNull)

+ (id)changeType:(id)myObj;

@end

.m文件代码:

@implementation NSDictionary (DeleteNull)

//将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;

}

//将NSArray中的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;

}

}

使用方法:

[model setValuesForKeysWithDictionary:[NSDictionary changeType:dict]];

第二种方法是利用AFNetworking的自动解析,去除掉值为null的键值对,我挺推崇这种方案的,但还要看个人喜好,装逼一点的就用拓展(个人不推荐)代码如下:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

AFJSONResponseSerializer *response = [AFJSONResponseSerializer serializer];

response.removesKeysWithNullValues = YES;

manager.responseSerializer = response;

manager.requestSerializer = [AFJSONRequestSerializer serializer];

请求接口获取到的数据其中出现null值,处理的时候导致了程序crash,解决方案如下:的更多相关文章

  1. 请求接口获取的json 字符串 前后不能有 双引号

    请求接口获取的json 字符串 前后不能有 双引号 否则JSON.parse 转换会报错

  2. 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优

    1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...

  3. $.when()方法监控ajax请求获取到的数据与普通ajax请求回调获取到的数据的不同

    1.$.when(ajax).done(function(data)}); 2.$.ajax().done(function(data){}); 1中的data被封装进一个对象[data, " ...

  4. ABP 后台调用接口 获取返回的数据

    原文:https://www.cnblogs.com/i3yuan/p/10703500.html insert 简单测试: public void test8() { string url = &q ...

  5. ABP JS调用接口 获取返回的数据

    var _userService = abp.services.app.user; console.log(abp.services.app.user); _userService.getUserBy ...

  6. 微信小程序获取多个input和textarea的值(es6加微信小程序APi)

    wxml js 俩行即可解决,money1,money2,money3

  7. 豆瓣爬虫——通过json接口获取数据

    最近在复习resqusts 爬虫模块,就重新写了一个豆瓣爬虫,这个网页从HTML 源码上来看是没有任何我想要的信息的,如下图所示: 这是网页视图,我在源码中查找影片信息,没有任何信息,如图: 由此我判 ...

  8. Retrofit Token过期 重新请求Token再去请求接口

    需求是这样的:请求接口A -- 服务器返回数据Token过期或失效  -- 重新请求Token并设置 -- 再去请求接口A 刚解决了这个问题,趁热打铁,写个博客记录一下:这个Token是添加到请求头里 ...

  9. HTML5 实现获取 gzip 压缩数据,并进行解压,同时解决汉字乱码,相关 pako.js

    1, 下载 pako.js => http://nodeca.github.io/pako/#Deflate.prototype.onData 2, 首先需要了解一下 XMLHttpReques ...

随机推荐

  1. nginx filter

    server { listen 80; server_name g.zcdn.com; index index.html; location / { proxy_cache cache_go; pro ...

  2. linux系统CPU,内存,磁盘,网络流量监控脚本

    前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...

  3. HDU 5054 Alice and Bob

    #include <cstdio> int main(){ int n,m,x,y; while(~scanf("%d%d%d%d",&n,&m,&am ...

  4. 数据库 BUG:Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=

    在mysql5中遇到的问题: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) f ...

  5. Advanced Customization of the jQuery Mobile Buttons | Appcropolis

    Advanced Customization of the jQuery Mobile Buttons | Appcropolis Advanced Customization of the jQue ...

  6. curl之post提交xml

    直接上代码: /** * 以post方式提交xml到对应的接口url * * @param string $xml 需要post的xml数据 * @param string $url url * @p ...

  7. if...else if...else

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace prog ...

  8. ExtJS002Window创建

    Ext.onReady(function () { Ext.create('Ext.window.Window', { title: 'window', width: 400, height: 300 ...

  9. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  10. C++的常量折叠(二)

    前面的C++的常量折叠(一)的最后留下了一个问题,那就是在声明i的时候,加上修饰符volatile关键字,发现结果输出的就不一样了,下面来说一下volatile这个关键字. C/C++中的volati ...