NSDictionary或NSArray與JSON字符串相互轉換

轉自:http://www.linchangyu.com/index.php/nsdictionary-nsarray-json-string-convert/

在iOS 5 中,蘋果引入了一個解析JSON串的NSJSONSerialization類。
通過該類,我們可以完成JSON數據與NSDictionary和NSArray之間的轉化。

以前,我記得我用的是第三方的插件。但是,蘋果出了這套解析後,效率也大大了超過了,所有的解析第三方類庫。所以,推薦使用NSJSONSerialization類來完成轉化。

一、將NSDictionary或NSArray轉化爲JSON串

// 將字典或者數組轉化爲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;
}

}
使用這個方法的返回,我們就可以得到想要的JSON串

NSString *jsonString = [[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding];

二、將JSON串轉化爲NSDictionary或NSArray

將NSString轉化爲NSData

[jsonString dataUsingEncoding:NSASCIIStringEncoding];

// 將JSON串轉化爲字典或者數組
- (id)toArrayOrNSDictionary:(NSData *)jsonData{
NSError *error = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingAllowFragments
error:&error];

if (jsonObject != nil && error == nil){
    return jsonObject;
}else{
    // 解析錯誤
     return nil;
}

}
三、將JSON串與NSArray和NSDictionary的操作進行封裝

當然,也有很多時候,我們將這些操作,分別定義在NSObject和NSString的一個分類中

直接貼:

1.將NSString轉化爲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轉化爲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
希望對你有所幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章