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

JSON字串與NSDictionary和NSArray之間的轉化

#pragma mark--把字典和陣列轉換成json字串  
+(NSString *)stringTOjson:(id)temps   //把字典和陣列轉換成json字串  
{  
    NSData* jsonData =[NSJSONSerialization dataWithJSONObject:temps  
                                                      options:NSJSONWritingPrettyPrinted error:nil];  
    NSString *strs=[[NSString alloc] initWithData:jsonData  
                                         encoding:NSUTF8StringEncoding];  
    return strs;  
}  
一、將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