iOS 开发每天分享优质文章iOS开发技术当仓央嘉措遇上纳兰性德

iOS字符串转字典->字符串加密解密转成jso的梗(Err

2018-07-18  本文已影响11人  flowerflower

这两天一朋友问我一个解析数据问题,给我发了一下数据格式,我当时看了一眼觉得很简单。于是自己通过其发给我的数据,通过造数据工具模拟请求,分分钟搞定。后来实际操作项目才发现似乎有点毒。首先数据是加密返回的,需要解密,拿到解密的数据再做解析。

目录
1.普通的字符串转字典
2.解密之后的数据转字典

首先我们先看一波普通的数据
一、普通的字符串转字典
图片.png

可以清楚的看到已经拿到数据了,接下来自己对数据进行模型化处理就可以了。但是如果遇上下面这数据情况就尴尬了,你会麻蛋,怎么差不多的数据结构为啥上面可以,下面不行。心里边肯定有很多关于疑问的小九九。

** 接下来我们来看一下下面的这种数据的处理方式

二、解密之后的数据
图片.png 图片.png 图片.png

首先采取跟上面一样处理数据的方式,发现后台打印报json解析失败,解析失败的话,那么dic里面自然而言也就为null

转JSON, 抛出了"Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." "错误
根据报错原因进行分析:

1.抛出的错误大致意思是说含有JSON转换无法识别的字符
2.但是把此串打印输出的JSON格式放到json中验证又是没问题的


图片.png

3.苹果自动生成的转义字符也是斜杠,但是自动生成的是对称的,而根据打印可以看出有些有的加了有的没加,那么猜测毒源可能来源于此。

那么产生这种问题的缘由是为何呢

因为字符串是加密过的,导致解密后的数据加了一些 “操作符”

解决方案:

图片.png

这时候我们回发现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;
}
上一篇下一篇

猜你喜欢

热点阅读