2013-03-18 50 views
0

我是iOS開發的新手。 當我使用NSJSONSerialization處理json時,我發現真的有問題。如何刪除NSString對象中的多餘Escape字符

NSLog(@"response: %@", responseString); 
NSData *jsonData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil]; 
NSLog(@"dict: %@", dict); 

,輸出是:

2013-03-18 20:13:56.228 XXXX[3550:5003] response: {"status":"success","data":"{\"title\":\"\",\"sessionName\":\"sid\",\"sessionID\":\"9217e5df3db6b4b4aa3eed800890069f\",\"rand\":5360}","md5":"292ee1e78628fc6360c647e938c4f1ea"} 
2013-03-18 20:13:56.229 XXXX[3550:5003] dict: { 
data = "{\"title\":\"\",\"sessionName\":\"sid\",\"sessionID\":\"9217e5df3db6b4b4aa3eed800890069f\",\"rand\":5360}"; 
md5 = 292ee1e78628fc6360c647e938c4f1ea; 
status = success; 

用「\」中的數據部分不能是的NSDictionary對象

所以,我應該怎麼做才能作出正確的?

對不起,我英文很差。

回答

1

無論出於何種原因,「數據」的值不是JSON字典,而是包含JSON數據的字符串。您可以在字典中再次應用JSONObjectWithData這個字符串,來取代值解決這個問題:

NSData *jsonData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; 
NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil]; 

NSData *nestedJsonData = [[dict objectForKey:@"data"] dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *nestedDict = [NSJSONSerialization JSONObjectWithData:nestedJsonData options:NSJSONReadingMutableContainers error:nil]; 

[dict setObject:nestedDict forKey:@"data"]; 
NSLog(@"dict: %@", dict); 

輸出:

dict: { 
    data =  { 
     rand = 5360; 
     sessionID = 9217e5df3db6b4b4aa3eed800890069f; 
     sessionName = sid; 
     title = ""; 
    }; 
    md5 = 292ee1e78628fc6360c647e938c4f1ea; 
    status = success; 
} 
+0

當然,一個更好的解決辦法,如果服務器發送正確的JSON是數據:-) – 2013-03-18 14:30:01

+0

現在我想知道這是如何工作的?爲什麼JSONObjectWithData將刪除所有這些字符? – Puttin 2013-04-01 06:50:13

+0

@ ct455332:轉義字符不在字符串中。它們只能由NSLog()打印。如果你單步執行代碼並查看變量,你應該看看它是如何工作的。 – 2013-04-01 11:59:42

相關問題