1. 程式人生 > >JSON資料與NSDictionary和NSArray之間的轉化

JSON資料與NSDictionary和NSArray之間的轉化

在iOS  5 中,蘋果引入了一個解析JSON串的NSJSONSerialization類。 通過該類,我們可以完成JSON資料與NSDictionaryNSArray之間的轉化。 以前,我記得我用的是第三方的外掛。但是,蘋果出了這套解析後,效率也大大了超過了,所有的解析第三方類庫。所以,推薦使用NSJSONSerialization類來完成轉化。 一、將NSDictionaryNSArray轉化為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 allocinitWithData:jsonData

                                                 encoding:NSUTF8StringEncoding];

二、將JSON串轉化為NSDictionaryNSArrayNSString轉化為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 != nilreturn 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:kNilOptionserror:&error];

    if (error != nilreturn nil;

    return result;

}

@end