IOS 开发之NSDictionary转换成JSON字符串
IOS开发之NSDictionary转换成JSON字符串
普通情况下,你可能会用一个NSDictionary的分类去做NSDictionary转JSON,如下代码:
NSError*error;
NSData*jsonData=[NSJSONSerializationdataWithJSONObject:selfoptions:NSJSONWritingPrettyPrintederror:&error];
if(!jsonData){
return@"{}";
}else{
return[[NSStringalloc]initWithData:jsonDataencoding:NSUTF8StringEncoding];
}
然而,NSDictionary装的数据类型鱼龙混杂,有可能是NSDate,NSNumber,NSValue等Objective-C对象,而[NSJSONSerializationdataWithJSONObject:options:error:]这个方法是不能解析这些对象的,如果有这些对象,则会导致crash。所以我们应该在调用NSJSONSerialization之前加一步,将所有数据处理成NSString,代码如下:
NSError*error=nil;
NSData*jsonData=nil;
if(!self){
returnnil;
}
NSMutableDictionary*dict=[NSMutableDictionarydictionary];
[selfenumerateKeysAndObjectsUsingBlock:^(id_Nonnullkey,id_Nonnullobj,BOOL*_Nonnullstop){
NSString*keyString=nil;
NSString*valueString=nil;
if([keyisKindOfClass:[NSStringclass]]){
keyString=key;
}else{
keyString=[NSStringstringWithFormat:@"%@",key];
}
if([objisKindOfClass:[NSStringclass]]){
valueString=obj;
}else{
valueString=[NSStringstringWithFormat:@"%@",obj];
}
[dictsetObject:valueStringforKey:keyString];
}];
jsonData=[NSJSONSerializationdataWithJSONObject:dictoptions:NSJSONWritingPrettyPrintederror:&error];
if([jsonDatalength]==0||error!=nil){
returnnil;
}
NSString*jsonString=[[NSStringalloc]initWithData:jsonDataencoding:NSUTF8StringEncoding];
returnjsonString;
这样就NSDictionary转JSON就不会crash了,同理,NSArray也应该这样做。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短