JSON

JSON_第1张图片
JSON_第2张图片
JSON_第3张图片
  • 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];
}
JSON_第4张图片
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)