2013-03-18 27 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

相关问题