这两天一朋友问我一个解析数据问题,给我发了一下数据格式,我当时看了一眼觉得很简单。于是自己通过其发给我的数据,通过造数据工具模拟请求,分分钟搞定。后来实际操作项目才发现似乎有点毒。首先数据是加密返回的,需要解密,拿到解密的数据再做解析。
目录
1.普通的字符串转字典
2.解密之后的数据转字典
首先我们先看一波普通的数据
一、普通的字符串转字典
可以清楚的看到已经拿到数据了,接下来自己对数据进行模型化处理就可以了。但是如果遇上下面这数据情况就尴尬了,你会麻蛋,怎么差不多的数据结构为啥上面可以,下面不行。心里边肯定有很多关于疑问的小九九。
** 接下来我们来看一下下面的这种数据的处理方式
二、解密之后的数据
首先采取跟上面一样处理数据的方式,发现后台打印报json解析失败,解析失败的话,那么dic里面自然而言也就为null
转JSON, 抛出了"Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." "错误
根据报错原因进行分析:
1.抛出的错误大致意思是说含有JSON转换无法识别的字符
2.但是把此串打印输出的JSON格式放到json中验证又是没问题的
3.苹果自动生成的转义字符也是斜杠,但是自动生成的是对称的,而根据打印可以看出有些有的加了有的没加,那么猜测毒源可能来源于此。
那么产生这种问题的缘由是为何呢
因为字符串是加密过的,导致解密后的数据加了一些 “操作符”
解决方案:
这时候我们回发现dic里面有值了,那么接下来就是一些数据解析问题了。这波只能自己去偷偷去玩了
额外解释:
//所有控制符都会被替换成空字符。
NSString *messageText =[str stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];
额外补充分类 NSString+HH
.h文件
- (id)toArrayOrNSDictionary;
.m文件
- (id)toArrayOrNSDictionary{
if (![self isKindOfClass:[NSString class]]) {
NSParameterAssert(@"self is not NSString!");
}
NSData *jsonData=[self dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingAllowFragments
error:&error];
if (jsonObject != nil && error == nil){
return jsonObject;
}
if(error){
NSLog(@"json解析失败:%@",error);
}
return nil;
}