這兩天一朋友問我一個解析數(shù)據(jù)問題,給我發(fā)了一下數(shù)據(jù)格式,我當時看了一眼覺得很簡單柳刮。于是自己通過其發(fā)給我的數(shù)據(jù)挖垛,通過造數(shù)據(jù)工具模擬請求,分分鐘搞定秉颗。后來實際操作項目才發(fā)現(xiàn)似乎有點毒痢毒。首先數(shù)據(jù)是加密返回的,需要解密蚕甥,拿到解密的數(shù)據(jù)再做解析哪替。
目錄
1.普通的字符串轉(zhuǎn)字典
2.解密之后的數(shù)據(jù)轉(zhuǎn)字典
首先我們先看一波普通的數(shù)據(jù)
一、普通的字符串轉(zhuǎn)字典
可以清楚的看到已經(jīng)拿到數(shù)據(jù)了菇怀,接下來自己對數(shù)據(jù)進行模型化處理就可以了凭舶。但是如果遇上下面這數(shù)據(jù)情況就尷尬了,你會麻蛋爱沟,怎么差不多的數(shù)據(jù)結(jié)構(gòu)為啥上面可以帅霜,下面不行。心里邊肯定有很多關(guān)于疑問的小九九呼伸。
** 接下來我們來看一下下面的這種數(shù)據(jù)的處理方式
二身冀、解密之后的數(shù)據(jù)
首先采取跟上面一樣處理數(shù)據(jù)的方式,發(fā)現(xiàn)后臺打印報json解析失敗蜂大,解析失敗的話闽铐,那么dic里面自然而言也就為null
轉(zhuǎn)JSON, 拋出了"Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." "錯誤
根據(jù)報錯原因進行分析:
1.拋出的錯誤大致意思是說含有JSON轉(zhuǎn)換無法識別的字符
2.但是把此串打印輸出的JSON格式放到j(luò)son中驗證又是沒問題的
3.蘋果自動生成的轉(zhuǎn)義字符也是斜杠,但是自動生成的是對稱的奶浦,而根據(jù)打印可以看出有些有的加了有的沒加,那么猜測毒源可能來源于此兄墅。
那么產(chǎn)生這種問題的緣由是為何呢
因為字符串是加密過的熙尉,導致解密后的數(shù)據(jù)加了一些 “操作符”
解決方案:
這時候我們回發(fā)現(xiàn)dic里面有值了灭翔,那么接下來就是一些數(shù)據(jù)解析問題了。這波只能自己去偷偷去玩了
額外解釋:
//所有控制符都會被替換成空字符贝次。
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;
}