需要用到 序列化与反序列化
顺便记录一下
- 上报距离为4.50这样的 double类型,服务器会自动识别为4.5导致我加密后的文件不符,无法上报成功。所以一开始采用的是在加密时候做string的拼接处理 进行加密
- 但是后面又遇到了,上报数据包含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);