JSON

作者: weyan | 来源:发表于2018-11-26 08:30 被阅读0次
    • JSON解析(反序列化)
    -------------------JSONData-->OC对象(字典|数组) [反序列化处理]-------------------
    //JSONData - >OC中的对象(字典|数组) [反序列化处理]
    -(void)jsonToOC
    {
        [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/video?type=JSON"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            
            //处理服务器返回的数据
            //01 JSONData - > NSString
            NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
            
            //02 JSONData - >OC中的对象(字典|数组)
            /* 参数说明
             *
             * 第一个参数:要解析的json数据
             * 第二个参数:解析数据时候附加的选项 默认传0
             * NSJSONReadingMutableContainers = (1UL << 0),  得到的对象是可变的
             * NSJSONReadingMutableLeaves = (1UL << 1),      得到的对象中字符串是可变的
             * NSJSONReadingAllowFragments = (1UL << 2)      ! 当返回的对象既不是字典也不是数组的时候(null)
             * 第三个参数:错误信息
             */
            NSDictionary * obj = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
            
            NSLog(@"%@--%@",[obj class],obj);
            
            
            /*
             [NSNull null]; //空对象
             nil //空
             //NSNull *null = [NSNull null];
             //NSDictionary *dict = @{@"name":@"xiaoma",@"age":[NSNull null]};
             */
            
        }] resume];
    }
    
    JSONData-->OC对象
    • JSON解析(序列化)
    ---------------------OC中的对象(字典|数组) - >JSONData[序列化处理]--------------------
    //OC中的对象(字典|数组) - >JSONData[序列化处理]
    -(void)ocToJSON
    {
        //注意:并不是所有的OC对象都支持转换为JSON
        
        //NSDictionary *dict = @{@"name":@"xiaoming",@"age":@25};
        //NSArray *array  = @[@"wen",@"xioamage",@"dangdang"];
        NSString *string = @"我恨你!";
        
        /*
         - 最外层的对象必须是 an NSArray or NSDictionary
         - 字典或数组中所有的元素只能是NSString, NSNumber, NSArray, NSDictionary, or NSNull
         - 字典中所有的key都必须是 NSStrings
         - NSNumbers 是标准的并且不能是无穷大
         */
        if (![NSJSONSerialization isValidJSONObject:string]) {
            NSLog(@"该对象不支持转换");
            return;
        }
        
        /* 参数说明
         *
         * 第一个参数:要序列化的OC对象
         * 第二个参数:选项
         */
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:string options:kNilOptions error:nil];
        NSLog(@"%@",[[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding]);
    }
    
    
    • JSON解析补充
    //把数据以json的方式来保存
    -(void)other
    {
        //01 加载数据
        NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil]];
        
        //02 把数据以json的方式来保存
        //写plist文件
        //[array writeToFile:@"/Users/xiaomage/Desktop/123.plist" atomically:YES];
        //写json文件 错误的写法
        //[array writeToFile:@"/Users/xiaomage/Desktop/123.json" atomically:YES];
        //需要先把OC对象转换成jsonData 然后再写文件
        
        //NSJSONWritingPrettyPrinted 排版美化结构
       NSData *jsonData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:nil];
        
        //03 写文件
        [jsonData writeToFile:@"/Users/123wex/Desktop/123.json" atomically:YES];
    }
    
    //加载json数据
    -(void)other2
    {
        //01 加载数据
        NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"123.json" ofType:nil]];
        
        //02 jsonData - >OC对象
        NSArray *array = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
        
        //03 打印输出
        NSLog(@"%@",array);
    }
    
    

    相关文章

      网友评论

          本文标题:JSON

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