iOS 序列化与反序列化

需要用到 序列化与反序列化

顺便记录一下

  1. 上报距离为4.50这样的 double类型,服务器会自动识别为4.5导致我加密后的文件不符,无法上报成功。所以一开始采用的是在加密时候做string的拼接处理 进行加密
  1. 但是后面又遇到了,上报数据包含array,OC里面数组打印的形式是这样的
 stepslist: (
        {
        "2017-02-17" =         {
            distance = "6.77";
            heat = "180.76";
            steps = 9875;
        };
    },
        {
        "2017-02-16" =         {
            distance = "4.77";
            heat = "127.36";
            steps = 7875;
        };
    }
)

OC 里面是()包含数组
而 用序列化 反序列化 转换之后的为 [ ]

 stepslist JSON: [
  {
    "2017-02-17" : {
      "steps" : "9875",
      "distance" : "6.77",
      "heat" : "180.76"
    }
  },
  {
    "2017-02-16" : {
      "steps" : "7875",
      "distance" : "4.77",
      "heat" : "127.36"
    }
  }
  }
]

序列化 反序列化的代码:


 
    // 序列化stepList
    NSError *error = nil;
    NSData *stepslistJosnData = [NSJSONSerialization dataWithJSONObject:stepslist options:NSJSONWritingPrettyPrinted error:&error];
    
    if ([stepslistJosnData length] > 0 && error == nil){
        NSLog(@"stepslist  josn data : %@", stepslistJosnData);
    }

    // 反序列化
    NSString *stepslistjsonString = [[NSString alloc] initWithData:stepslistJosnData encoding:NSUTF8StringEncoding];
    NSLog(@"stepslist josn string : %@", stepslistjsonString);
    

我写的过于简单,因为没有error会出现错误的形式

如果是在请求数据或者其他地方 需要进行判断

if ([jsonData length] > 0 &&error == nil)
{

...
}
else if ([jsonData length] == 0 &&error == nil)
{

...
}else if (error != nil){

...
} 

由于序列化之前是字典 ,所以会有换行符\n

删除数组中的\n 和 空格

NSString *resultStr = [stepslistjsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];

NSString *resultListString = [resultStr stringByReplacingOccurrencesOfString:@" " withString:@""];
    
 NSLog(@"resultStr:%@",resultListString);
    
    

推荐阅读更多精彩内容