URL解码ios中的json

时间:2012-10-04 07:00:31

标签: iphone ios url connection json

我在php中有一个web服务,其中有浏览器URL提到了bel:

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

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

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

这造成了问题。

我已经使用此代码从我的网址中获取数据。

     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
        {
......
}

这里,我得到null响应,因为url正在解码...我怎样才能解决这个问题... 帮帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

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);

也许这会对你有帮助。

答案 1 :(得分:0)

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

首先创建新的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响应解析为一个对象我们正在使用NSArray,因为我们正在解析一个JSON状态对象数组

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

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

我希望这可以帮助你...

:)