IOS 開(kāi)發(fā)之NSDictionary轉(zhuǎn)換成JSON字符串
IOS 開(kāi)發(fā)之NSDictionary轉(zhuǎn)換成JSON字符串
普通情況下,你可能會(huì)用一個(gè)NSDictionary的分類(lèi)去做NSDictionary轉(zhuǎn)JSON,如下代碼:
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
if (! jsonData) {
return @"{}";
} else {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
然而,NSDictionary裝的數(shù)據(jù)類(lèi)型魚(yú)龍混雜,有可能是NSDate,NSNumber,NSValue等Objective-C對(duì)象,而[NSJSONSerialization dataWithJSONObject:options:error:]這個(gè)方法是不能解析這些對(duì)象的,如果有這些對(duì)象,則會(huì)導(dǎo)致crash。所以我們應(yīng)該在調(diào)用NSJSONSerialization之前加一步,將所有數(shù)據(jù)處理成NSString,代碼如下:
NSError *error = nil;
NSData *jsonData = nil;
if (!self) {
return nil;
}
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSString *keyString = nil;
NSString *valueString = nil;
if ([key isKindOfClass:[NSString class]]) {
keyString = key;
}else{
keyString = [NSString stringWithFormat:@"%@",key];
}
if ([obj isKindOfClass:[NSString class]]) {
valueString = obj;
}else{
valueString = [NSString stringWithFormat:@"%@",obj];
}
[dict setObject:valueString forKey:keyString];
}];
jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
if ([jsonData length] == 0 || error != nil) {
return nil;
}
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
return jsonString;
這樣就NSDictionary轉(zhuǎn)JSON就不會(huì)crash了,同理,NSArray也應(yīng)該這樣做。
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
CI框架驗(yàn)證碼CAPTCHA輔助函數(shù)用法實(shí)例
這篇文章主要介紹了CI框架驗(yàn)證碼CAPTCHA輔助函數(shù)用法,以實(shí)例形式詳細(xì)講述了基于CAPTCHA輔助函數(shù)實(shí)現(xiàn)驗(yàn)證碼的方法,需要的朋友可以參考下2014-11-11
利用switch語(yǔ)句進(jìn)行多選一判斷的實(shí)例代碼
下面小編就為大家?guī)?lái)一篇利用switch語(yǔ)句進(jìn)行多選一判斷的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
smarty模板引擎使用內(nèi)建函數(shù)foreach循環(huán)取出所有數(shù)組值的方法
這篇文章主要介紹了smarty模板引擎使用內(nèi)建函數(shù)foreach循環(huán)取出所有數(shù)組值的方法,實(shí)例分析了foreach循環(huán)遍歷數(shù)組的幾種常用技巧,需要的朋友可以參考下2015-01-01
php如何用PDO操作大數(shù)據(jù)對(duì)象
我們?cè)谑褂脭?shù)據(jù)庫(kù)時(shí),很少會(huì)向數(shù)據(jù)庫(kù)中存儲(chǔ)很大的內(nèi)容字段。但是,MySQL 其實(shí)也為我們準(zhǔn)備了這種類(lèi)型的存儲(chǔ),只是我們平常用得不多而已。今天我們就來(lái)學(xué)習(xí)了解一下使用 PDO 如何操作 MySQL 中的大數(shù)據(jù)對(duì)象。2021-06-06
Drupal7連接多個(gè)數(shù)據(jù)庫(kù)及常見(jiàn)問(wèn)題解決
這篇文章主要介紹了Drupal7連接多個(gè)數(shù)據(jù)庫(kù)的方法、操作實(shí)例,以及常見(jiàn)問(wèn)題解決方法,需要的朋友可以參考下2014-03-03
CI(CodeIgniter)簡(jiǎn)單統(tǒng)計(jì)訪問(wèn)人數(shù)實(shí)現(xiàn)方法
這篇文章主要介紹了CI(CodeIgniter)簡(jiǎn)單統(tǒng)計(jì)訪問(wèn)人數(shù)實(shí)現(xiàn)方法,這里使用TXT文本文件簡(jiǎn)單演示了CodeIgniter框架記錄訪問(wèn)人數(shù)的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01

