苹果系统NSJSONSerialization转JSON

熟悉的网络json转换库
如:TouchJSON、SBJSON、JSONKit等等,但是NSJSONSerialization是苹果自家开发,所以性能方面的话应该就不用说了,毕竟是亲生的。

常用方法:

1、json数据转OC对象
    + (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
2、OC对象数据转json
    + (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

参数选择:

typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) {
    NSJSONReadingMutableContainers = (1UL << 0),
    NSJSONReadingMutableLeaves = (1UL << 1),
    NSJSONReadingAllowFragments = (1UL << 2)
} NS_ENUM_AVAILABLE(10_7, 5_0);

//NSJSONReadingMutableContainers:返回可变容器,NSMutableDictionary或NSMutableArray。  
//NSJSONReadingMutableLeaves:返回的JSON对象中字符串的值为NSMutableString,目前在iOS 7上测试不好用,应该是个bug,参见: [http://stackoverflow.com/questions/19345864/nsjsonreadingmutableleaves-option-is-not-working](http://stackoverflow.com/questions/19345864/nsjsonreadingmutableleaves-option-is-not-working) 
//NSJSONReadingAllowFragments:允许JSON字符串最外层既不是NSArray也不是NSDictionary,但必须是有效的JSON Fragment。例如使用这个选项可以解析 @“123” 这样的字符串。参见: [http://stackoverflow.com/questions/16961025/nsjsonserialization-nsjsonreadingallowfragments-reading](http://stackoverflow.com/questions/16961025/nsjsonserialization-nsjsonreadingallowfragments-reading) 

//OC对象数据转json
typedef NS_OPTIONS(NSUInteger, NSJSONWritingOptions) {
    NSJSONWritingPrettyPrinted = (1UL << 0) //输出json格式化
} NS_ENUM_AVAILABLE(10_7, 5_0);
//不想格式化可以传kNilOptions

1、JSON转NSDictionary


/*
    JSON转字典
*/
-(void)jsonToDict{
    //创建URL对象
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123&type=JSON"];
    //创建请求
    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
    //发送异步请求
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        /*
         第一个参数:要解析的二进制数据
         第二个参数:解析json的选项
            NSJSONReadingMutableContainers = (1UL << 0), 最外层是可变的字典和数组
            NSJSONReadingMutableLeaves = (1UL << 1),     里面的字符串也是可变的,iOS7
            NSJSONReadingAllowFragments = (1UL << 2)     最外层既不是字典也不是数组
            kNilOptions为什么都没有
         第三个参数:错误信息
         */
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

        NSLog(@"字典为--------%@",dict);
        NSLog(@"字典中的success为-------------%@",dict[@"success"]);
    }];
}

2、NSDictionary转JSON


/*
    字典转JSON
*/
-(void)DictToJson{
    //1、创建一个NSDictionary
    NSDictionary *dict = @{
                @"Name":@"LitterL",
                @"Age":@"20"
                };
    //2、判断是否能转为Json数据
    BOOL isValidJSONObject =  [NSJSONSerialization isValidJSONObject:dict];
    if (isValidJSONObject) {
        /*
         第一个参数:OC对象 也就是我们dict
         第二个参数:
            NSJSONWritingPrettyPrinted 排版
            kNilOptions 什么也不做
         */
        NSData *data =  [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
        //打印JSON数据
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    }
}

这里的话是排版了的



这里的话是没有排版的,需更改:(大家自行对照)

NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];

你可能感兴趣的:(苹果系统NSJSONSerialization转JSON)