json在ios中的URL解码

我在php中有1 webservice有浏览器url提到bel:

http:Domain/webservice/ACTEC_WebService.php?lastupdate=2012-09-01 01:00:00 

现在,当我尝试在我的iPhone应用程序中获取url时,它正在使用此url:

 http://Domain/webservice/ACTEC_WebService.php?lastupdate=2012-09-01%2001:00:00 

这是造成问题。

我用这个代码从我的url获取数据。

  SBJSON *json = [SBJSON new]; json.humanReadable = YES; responseData = [[NSMutableData data] retain]; NSString *service = @""; NSString *str; str = @"LastUpdated"; NSString *requestString = [NSString stringWithFormat:@"{\"LastUpdated\":\"%@\"}",str]; // [[NSUserDefaults standardUserDefaults] setValue:nil forKey:@"WRONGANSWER"]; NSLog(@"request string:%@",requestString); NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]]; NSString *fileLoc = [[NSBundle mainBundle] pathForResource:@"URLName" ofType:@"plist"]; NSDictionary *fileContents = [[NSDictionary alloc] initWithContentsOfFile:fileLoc]; NSString *urlLoc = [fileContents objectForKey:@"URL"]; //urlLoc = [urlLoc stringByAppendingString:service]; NSLog(@"URL : %@",urlLoc); NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:urlLoc]]; NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]]; [request setHTTPMethod: @"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:requestData]; NSError *respError = nil; NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ]; NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding]; NSLog(@"Resp : %@",responseString); if (respError) { // NSString *msg = [NSString stringWithFormat:@"Connection failed! Error - %@ %@", // [respError localizedDescription], // [[respError userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ACTEC" message:@"check your network connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [alertView release]; } else { ...... } 

在这里,我越来越空响应,因为URL正在解码…我怎样才能解决这个问题…帮助我。 提前致谢。

 NSString *urlLoc = [[fileContents objectForKey:@"URL"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSMutableData *postData = [NSMutableData data]; NSMutableURLRequest *urlRequest; [postData appendData: [[NSString stringWithFormat: @"add your data which you want to send"] dataUsingEncoding: NSUTF8StringEncoding]]; NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; urlRequest = [[NSMutableURLRequest alloc] init]; [urlRequest setURL:[NSURL URLWithString:urlLoc]]; [urlRequest setHTTPMethod:@"POST"]; [urlRequest setValue:postLength forHTTPHeaderField:@"Content-Length"]; [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [urlRequest setHTTPBody:postData]; NSString *temp = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding]; NSLog(@"\n\nurl =%@ \n posted data =>%@",urlLoc, temp); 

检查nslog。 你发送哪些数据来服务。

 NSData *response = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil]; NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; NSLog(@"json_string >> %@",json_string); 

也许这会帮助你。

嘿亲爱的只是另一个例子,我只是发布我的代码

首先创build新的SBJSON分析器对象

 SBJSON *parser = [[SBJSON alloc] init]; NSURLRequest *request = [NSURLRequest requestWithURL:  [NSURL URLWithString:@"http:Domain/webservice/ACTEC_WebService.php?lastupdate=2012-09-01%2001:00:00"]]; 

执行请求并获取JSON作为一个NSData对象

 NSData *response = [NSURLConnection sendSynchronousRequest:request  returningResponse:nil error:nil]; 

从NSData响应获取JSON作为NSString

 NSString *json_string = [[NSString alloc]  initWithData:response encoding:NSUTF8StringEncoding]; 

将JSON响应parsing为一个对象因为我们parsing了一个JSON状态对象的数组,所以我们使用NSArray

 NSArray *statuses = [parser objectWithString:json_string error:nil] 

而在状态数组中,您可以获得所有需要的数据。

我希望这可以帮助你…

🙂