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]
而在状态数组中,您可以获得所有需要的数据。
我希望这可以帮助你…
🙂