iOS JSON 数据解析

(1)JSON数据->OC对象(反序列化)

-(void)JSONToOC
{
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=33&pwd=33&type=JSON"];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        /*
         第一个参数:要解析的JSON数据,是NSData类型,也就是二进制数据
         第二个参数: 解析JSON的可选配置参数
         NSJSONReadingMutableContainers 解析出来的字典和数组是可变的
         NSJSONReadingMutableLeaves 解析出来的对象中的字符串是可变的  iOS7以后有问题,很少用到
         NSJSONReadingAllowFragments 被解析的JSON数据如果既不是字典也不是数组, 那么就必须使用这个
         */
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    }];
}

(2)OC对象->JSON对象(序列化)

    NSDictionary *dictM = @{
                            @"name":@"testName",
                            @"age":@100,
                            @"height":@1.72
                            };
    //2.OC->JSON
    /*
     注意:可以通过+ (BOOL)isValidJSONObject:(id)obj;方法判断当前OC对象能否转换为JSON数据
     具体限制:
         1.obj 是NSArray 或 NSDictionay 以及他们派生出来的子类
         2.obj 包含的所有对象是NSString,NSNumber,NSArray,NSDictionary 或NSNull
         3.字典中所有的key必须是NSString类型的
         4.NSNumber的对象不能是Null或无穷大
     */
    /*
     第一个参数:要转换成JSON数据的OC对象,这里为一个字典
     第二个参数:NSJSONWritingPrettyPrinted对转换之后的JSON对象进行排版,无意义
     */
    NSData *data = [NSJSONSerialization dataWithJSONObject:dictM options:NSJSONWritingPrettyPrinted error:nil];

    //3.打印查看Data是否有值
    /*
     第一个参数:要转换为STring的二进制数据
     第二个参数:编码方式,通常采用NSUTF8StringEncoding
     */
    NSString *strM = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@",strM);

(3)OC对象和JSON数据格式之间的一一对应关系

//OC对象和JSON数据之间的一一对应关系
-(void)oCWithJSON
{
    //JSON的各种数据格式
    //NSString *test = @"\"testName\"";
    //NSString *test = @"true";
    NSString *test = @"{\"name\":\"testName\"}";

    //把JSON数据->OC对象,以便查看他们之间的一一对应关系
    //注意点:如何被解析的JSON数据如果既不是字典也不是数组(比如是NSString), 那么就必须使用这NSJSONReadingAllowFragments
    id obj = [NSJSONSerialization JSONObjectWithData:[test dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];

    NSLog(@"%@", [obj class]);

    /* JSON数据格式和OC对象的一一对应关系
         {} -> 字典
         [] -> 数组
         "" -> 字符串
         10/10.1 -> NSNumber
         true/false -> NSNumber
         null -> NSNull
     */
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 解析成对象放到数组中 Author 对象头文件 @interface Author : NSObject@prop...
    少爷1103阅读 6,602评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,671评论 19 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,240评论 4 61
  • 梅拾璎 每个人心里,都有个女神的模样。而我的心里一直住着个像丁香一般的姑娘,身材窈窕,面容姣好,浅笑嫣然,腹有诗书...
    lucy大人阅读 4,583评论 18 50
  • 师范同学Q,毕业后看了下贫穷的家庭毅然放弃了工作,去了海南!从服务员做到领班到客户经理到售楼小姐到售楼经理到自...
    山中木土阅读 1,501评论 0 0