美文网首页
NSJSONSerializationJSON数据与NSDict

NSJSONSerializationJSON数据与NSDict

作者: 来宝 | 来源:发表于2016-05-07 12:36 被阅读86次

    在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:kNilOptionserror:&error];
    
    if (error != nil) return nil;
    
    return result;
    }
    @end
    

    相关文章

      网友评论

          本文标题:NSJSONSerializationJSON数据与NSDict

          本文链接:https://www.haomeiwen.com/subject/foajrttx.html