iOS 开发中序列化与反序列化?

iOS 开发中序列化与反序列化?_第1张图片
『导言』

在iOS开发解析数据或者数据转换时候,经常遇到序列化反序列化。下载:JSON与OC转化demo

  • 反序列化:

JSON数据 ---->OC对象

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

  • 例如:
 // 例如:str = @“\"wendingding"”;  
    // 1) 既不是数组arr, 也不是字典dic ;
    // 2)options用NSJSONReadingAllowFragments
  // 3)一般用 0 或者 KNillOptions
        NSString *str = @"\"MeiNvJuanJuan\"";
          id  obj =  [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];//传0 或者  kNilOptions

        NSLog(@"%@\n%@",[obj class],obj);
  • 打印结果:data--->str
2017-03-10 17:24:08.923 01-掌握JSON-解析-zwj[1553:187861] __NSCFString
MeiNvJuanJuan
  • 序列化

OC对象 -------> JSON数据

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

  • 注意:
并不是所有的OC对象可以转换为JSON。例如字符串 。例如:    NSString *strM = @"zhaowenjuan";
  OC->JSON: 同时满足以下条件:
     - 最外层为数组或者字典 NSArray or NSDictionary
     - 所有元素为这些类型  NSString, NSNumber, NSArray, NSDictionary, or NSNull
     - 所有的key必须是类型 NSStrings
     - 所有NSNumbers 不能是无穷大
  • 例如:
 NSDictionary *dicM = @{
                           @"name":@"zwj",
                           @"age":@3//@3表示数据对象
                           };
    
    
    NSArray *arrM = @[@"123",@"345"];
    //注意:并不是所有的OC对象可以转换为JSON。例如字符串
    NSString *strM = @"zhaowenjuan";
    BOOL isValid = [NSJSONSerialization isValidJSONObject:strM];
    if (! isValid) {
        NSLog(@"%zd",isValid);
        return;
    }
    /*

     + (BOOL)isValidJSONObject:(id)obj;

   同时满足以下:
     - 最外层为数组或者字典 NSArray or NSDictionary
     - 所有元素为这些类型  NSString, NSNumber, NSArray, NSDictionary, or NSNull
     - 所有的key必须是类型 NSStrings
     - 所有NSNumbers 不能是无穷大
  
     */
    
    /*
     OC---->JSON
     参数1 要转换的OC对象
     参数2  选项NSJSONWritingPrettyPrinted  美观
     参数3
     */
  NSData *data =   [NSJSONSerialization dataWithJSONObject:strM options:NSJSONWritingPrettyPrinted error:nil];//NSJSONWritingPrettyPrinted  kNilOptions
    NSLog(@"json -- %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    
    
    
    /*
     
     2017-03-13 13:38:44.768 01-掌握JSON-解析-zwj[1222:147729] json -- {
     "name" : "zwj",
     "age" : 3
     }
     
     2017-03-13 13:40:02.290 01-掌握JSON-解析-zwj[1237:148840] json -- [
     "123",
     "345"
     ]
     
     */

你可能感兴趣的:(iOS 开发中序列化与反序列化?)