在iOS 5 中亚茬,蘋果引入了一個(gè)解析JSON串的NSJSONSerialization類。
通過(guò)該類浓恳,我們可以完成JSON數(shù)據(jù)與NSDictionary和NSArray之間的轉(zhuǎn)化刹缝。
以前葡兑,我記得我用的是第三方的插件。但是赞草,蘋果出了這套解析后,效率也大大了超過(guò)了吆鹤,所有的解析第三方類庫(kù)厨疙。所以,推薦使用NSJSONSerialization類來(lái)完成轉(zhuǎn)化疑务。
一沾凄、將NSDictionary或NSArray轉(zhuǎn)化為JSON串
// 將字典或者數(shù)組轉(zhuǎn)化為JSON串
-
(NSData *)toJSONData:(id)theData{
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:theData
options:NSJSONWritingPrettyPrinted
error:&error];if ([jsonData length] > 0 && error == nil){
return jsonData;
}else{
return nil;
}
}
使用這個(gè)方法的返回,我們就可以得到想要的JSON串
NSString *jsonString = [[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding];
二知允、將JSON串轉(zhuǎn)化為NSDictionary或NSArray
將NSString轉(zhuǎn)化為NSData
[jsonString dataUsingEncoding:NSASCIIStringEncoding];
// 將JSON串轉(zhuǎn)化為字典或者數(shù)組
-
(id)toArrayOrNSDictionary:(NSData *)jsonData{
NSError *error = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingAllowFragments
error:&error];if (jsonObject != nil && error == nil){
return jsonObject;
}else{
// 解析錯(cuò)誤
return nil;
}
}
三撒蟀、將JSON串與NSArray和NSDictionary的操作進(jìn)行封裝
當(dāng)然,也有很多時(shí)候温鸽,我們將這些操作保屯,分別定義在NSObject和NSString的一個(gè)分類中
直接貼:
1.將NSString轉(zhuǎn)化為NSArray或者NSDictionary
import "NSString+JSONCategories.h"
@implementation NSString(JSONCategories)
-(id)JSONValue;
{
NSData* data = [self dataUsingEncoding:NSUTF8StringEncoding];
__autoreleasing NSError* error = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
@end
2.將NSArray或者NSDictionary轉(zhuǎn)化為NSString
import "NSObject+JSONCategories.h"
@implementation NSObject (JSONCategories)
-(NSData)JSONString;
{
NSError error = nil;
id result = [NSJSONSerialization dataWithJSONObject:self
options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
@end
希望對(duì)你有所幫助!