NSJSONSerialization-JSON數(shù)據(jù)與NSDictionary和NSArray之間的轉(zhuǎn)化

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

以前,我記得我用的是第三方的插件。但是,蘋果出了這套解析后,效率也大大了超過了,所有的解析第三方類庫。所以,推薦使用NSJSONSerialization類來完成轉(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;
    }
    }

使用這個方法的返回,我們就可以得到想要的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{
    // 解析錯誤
    return nil;
    }

}

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

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

直接貼:

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

希望對你有所幫助!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容