IOS 开发之NSDictionary转换成JSON字符串

作者: 日期:2019-09-03

ios 开发之nsdictionary转换成json字符串

普通情况下,你可能会用一个nsdictionary的分类去做nsdictionary转json,如下代码:

nserror *error;
nsdata *jsondata = [nsjsonserialization datawithjsonobject:self options:nsjsonwritingprettyprinted error: 
if  {
 return @"{}";
} else {
 return [[nsstring alloc] initwithdata:jsondata encoding:nsutf8stringencoding];

然而,nsdictionary装的数据类型鱼龙混杂,有可能是nsdate,nsnumber,nsvalue等objective-c对象,而[nsjsonserialization datawithjsonobject:options:error:]这个方法是不能解析这些对象的,如果有这些对象,则会导致crash。所以我们应该在调用nsjsonserialization之前加一步,将所有数据处理成nsstring,代码如下:

nserror *error = nil;
nsdata *jsondata = nil;
if  {
 return nil;
nsmutabledictionary *dict = [nsmutabledictionary dictionary];
[self enumeratekeysandobjectsusingblock:^ {
 nsstring *keystring = nil;
 nsstring *valuestring = nil;
 if  {
 keystring = key;
 }else{
 keystring = [nsstring stringwithformat:@"%@",key];
 if  {
 valuestring = obj;
 }else{
 valuestring = [nsstring stringwithformat:@"%@",obj];
 [dict setobject:valuestring forkey:keystring];
jsondata = [nsjsonserialization datawithjsonobject:dict options:nsjsonwritingprettyprinted error: 
if  {
 return nil;
nsstring *jsonstring = [[nsstring alloc] initwithdata:jsondata encoding:nsutf8stringencoding];
return jsonstring;

这样就nsdictionary转json就不会crash了,同理,nsarray也应该这样做。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

首页
电话
短信
联系