美文网首页iOS
iOS中json数据存在NULL的问题

iOS中json数据存在NULL的问题

作者: 忘带充电宝de皮卡丘 | 来源:发表于2017-03-23 11:24 被阅读0次

问题现象

本人最近发现写的几个项目都会遇到一个严重的坑,程序在获取某些数据之后莫名崩溃(其实很早就发现了,只是不想去解决)。原因:由于服务器返回数据的字段偶尔有NULL类型存在,然后以Json形式返回给客户端时就会出现这样的数据,如果直接赋值给其他对象就会造成崩溃。

解决方法

一、如果你使用AFNetwork 这个库做网络请求的话,可以用以下代码,自动帮你去掉这个讨厌的空值

AFNetWorking移除空值

二、创建一个字典的分类

.h文件

#import <Foundation/Foundation.h>

@interfaceNSDictionary (SetNullStr)

+(id)changeType:(id)myObj;

@end

.m文件

#import"NSDictionary+SetNullStr.h"

@implementationNSDictionary (SetNullStr)

//将NSDictionary中的Null类型的项目转化成@""

+(NSDictionary*)nullDic:(NSDictionary*)myDic

{

NSArray*keyArr = [myDicallKeys];

NSMutableDictionary*resDic = [[NSMutableDictionaryalloc]init];

for(inti =0; i < keyArr.count; i ++)

{

idobj = [myDicobjectForKey:keyArr[i]];

obj = [selfchangeType:obj];

[resDicsetObject:objforKey:keyArr[i]];

}

returnresDic;

}

//将NSArray中的Null类型的项目转化成@""

+(NSArray*)nullArr:(NSArray*)myArr

{

NSMutableArray*resArr = [[NSMutableArrayalloc]init];

for(inti =0; i < myArr.count; i ++)

{

idobj = myArr[i];

obj = [selfchangeType:obj];

[resArraddObject:obj];

}

returnresArr;

}

//将NSString类型的原路返回

+(NSString*)stringToString:(NSString*)string

{

returnstring;

}

//将Null类型的项目转化成@""

+(NSString*)nullToString

{

return@"";

}

//主要方法

//类型识别:将所有的NSNull类型转化成@""

+(id)changeType:(id)myObj

{

if([myObjisKindOfClass:[NSDictionaryclass]])

{

return[selfnullDic:myObj];

}

else if([myObjisKindOfClass:[NSArrayclass]])

{

return[selfnullArr:myObj];

}

else if([myObjisKindOfClass:[NSStringclass]])

{

return[selfstringToString:myObj];

}

else if([myObjisKindOfClass:[NSNullclass]])

{

return[selfnullToString];

}

else

{

returnmyObj;

}

}

@end

需要转换的时候调用以下方法就OK了,不管有多少个层级,全部转换

//json表示获取到的带有NULL对象的json数据

NSDictionary*newDict = [NSDictionary changeType:json];

三、终极方案

在网上查询各种方案,最后在GitHub找到一个三方Category,叫做NullSafe ,在运行时操作,把这个讨厌的空值置为nil,而nil是安全的,可以向nil对象发送任何message而不会奔溃。这个category使用起来非常方便,只要加入到了工程中就可以了,你其他的什么都不用做。详细的请去Github上查看:https://github.com/nicklockwood/NullSafe

相关文章

网友评论

    本文标题:iOS中json数据存在NULL的问题

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