iOS 7:以级联方式使用NSDictionary反序列化后获取JSON响应

问题描述:

从Web服务接收到JSON响应之后。我有从Web服务iOS 7:以级联方式使用NSDictionary反序列化后获取JSON响应

{"d":"{\"Status\":0,\"Message\":\"Registered Successfully\",\"Token\":\"281fecff-2d44-4530-bc24-03558f1ebda1\",\"CurrentTimestamp\":\"23-09-2014 09:58:39 +05:30\",\"ValidUntilTimespan\":\"23-09-2014 09:58:39 +05:30\"}"} 

这种答复,我已经删除“d:”首先这反序列化字符串和“\”,使其有效的JSON解析 。

NSString *responseData = [[NSString alloc]initWithData:receivedData encoding:NSUTF8StringEncoding]; 
responseData = [responseData stringByReplacingOccurrencesOfString:@" " withString:@""]; 
responseData = [responseData stringByReplacingOccurrencesOfString:@"\\" withString:@""]; 
responseData = [responseData stringByReplacingOccurrencesOfString:@"\"d\":" withString:@""]; 
responseData = [responseData substringToIndex:[responseData length] - 2]; 
responseData = [responseData substringWithRange:NSMakeRange(2, [responseData length]-2)]; 

NSLog(@"Reponse data %@",responseData); 
NSData *jsonData = [responseData dataUsingEncoding:NSUTF8StringEncoding]; 
NSError *errorJson=nil; 
NSDictionary *myDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&errorJson]; 
NSLog(@"Final %@",myDictionary); 

NSString *valueMessage = [myDictionary objectForKey:KeyMessage]; 
NSString *valueStatus = [myDictionary objectForKey:KeyStatus]; 
NSString *valueCurrentTimestamp = [myDictionary objectForKey:KeyCurrentTimestamp]; 
NSString *valueToken = [myDictionary objectForKey:KeyToken]; 
NSString *valueValidUntillTimepstamp = [myDictionary objectForKey:KeyValidUntillTimepstamp]; 
    //values 
NSLog(@"Message = %@",valueMessage); 
NSLog(@"Status = %@",valueStatus); 
NSLog(@"currenttimestamp= %@",valueCurrentTimestamp); 
NSLog(@"token= %@",valueToken); 
NSLog(@"validuntiltimespan= %@",valueValidUntillTimepstamp); 

这是我的日志结果:

014-09-23 10:03:13.885 Sbits_Journal[1015:60b] Response data {"Status":0,"Message":"RegisteredSuccessfully","Token":"281fecff-2d44-4530-bc24-0 3558f1ebda1","CurrentTimestamp":"23-09-201409:58:39+05:30","ValidUntilTimespan":"23-09- 201409:58:39+05:30"} 
2014-09-23 10:03:13.886 Sbits_Journal[1015:60b] Final { 
CurrentTimestamp = "23-09-201409:58:39+05:30"; 
Message = RegisteredSuccessfully; 
Status = 0; 
Token = "281fecff-2d44-4530-bc24-03558f1ebda1"; 
ValidUntilTimespan = "23-09-201409:58:39+05:30"; 
} 

但我正在逐渐在串联方式“RegisteredSuccessfully”字符串响应喜欢这个 但我想只取这个字符串,并显示警报由于越来越串状我无法在警报中显示“已成功注册”。 这是正确的方式我已解析或有没有任何其他的方法来冻结? 提前致谢。

我想通了这个问题调试线后

线
responseData = [responseData stringByReplacingOccurrencesOfString:@" " withString:@""]; 

由于此订单的空间是越来越连接在一起,所以我只是评论上面一行,并再次运行。 我知道这是非常小的问题,但可能是它可以帮助某人,所以我回答了我自己的问题。