Post&的区别在ios中的Json Parsing中获取方法

时间:2013-07-25 09:39:58

标签: ios json

我实现JSON解析如下:

-(void)getallEvent
{        
    SBJSON *json = [SBJSON new];
    json.humanReadable = YES;
    responseData = [[NSMutableData data] retain];

    NSString *service = @"/GetAllVenue";

    NSString *str;
    str = @"Calagary";
    NSString *requestString = [NSString stringWithFormat:@"{\"CityName\":\"%@\"}",str];

    //NSLog(@"request string:%@",requestString);

    //    NSString *requestString = [NSString stringWithFormat:@"{\"GetAllEventsDetails\":\"%@\"}",service];
    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];

    //    self.connection = [NSURLConnection connectionWithRequest:request delegate:self];



    NSError *respError = nil;
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ];

    if (respError) 
    {
        NSString *msg = [NSString stringWithFormat:@"Connection failed! Error - %@ %@",
                         [respError localizedDescription],
                         [[respError userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]];   
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Check your network connection"  message:msg delegate:self cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];
        [alertView show];
        [alertView release];

    } 
    else
    {
        NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];

        NSDictionary *results = [[responseString JSONValue] retain];
        //NSLog(@" %@",results);
        NSString *extractUsers = [[results objectForKey:@"d"] retain];
        NSDictionary *finalResult = [[extractUsers JSONValue] retain];
        NSLog(@"Final Results : %@",finalResult);
        listOfEvents = [finalResult objectForKey:@"List of Event details of given Venue"];

}

使用此代码会降低应用程序的速度。如何解析背景中的json? * 这适用于Post方法吗? Post&的区别是什么?获取方法? *

json解析还有其他方法吗?

5 个答案:

答案 0 :(得分:3)

您正在使用在主线程上执行的同步请求,因此如果您需要在后台使用异步加载。

POST方法:     POST方法生成一个FORM集合,它作为HTTP请求体发送。表单中键入的所有值都将存储在FORM集合中。

GET METHOD: GET方法通过将信息附加到URL(带问号)并将其存储为A Querystring集合来发送信息。 Querystring集合作为名称/值对传递给服务器。 URL的长度应小于255个字符。

An HTTP GET is a request from the client to the server, asking for a resource.

An HTTP POST is an upload of data (form information, image data, whatever) from the client to the server.

查看此答案以获取更多详细信息:what-is-the-difference-between-post-and-get

答案 1 :(得分:1)

您正在进行同步通信请求,这会降低应用程序的速度。您应该发出异步请求以保持您的应用程序响应。 解析JSON数据时没有任何顾虑。

答案 2 :(得分:1)

我建议在您的上下文中使用AFNetworking,这将简化连接管理,后台队列执行以及解析您从服务器返回的JSON

下面的代码示例将创建一个HTTP客户端,其base URL (<hostname>)并从给定路径获取JSON个有效负载。网络请求在后台运行,并在完成

时运行给定的块
httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

// set the type to JSON
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[httpClient setDefaultHeader:@"Accept" value:@"application/json"];
[httpClient setParameterEncoding:AFJSONParameterEncoding];

// Activate newtork indicator        
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];

// Request the <path> from the server and parse the response to JSON
// this calls a GET method to <hostname>/<path>
[httpClient getPath:<your path> parameters:Nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    // responseObject is a JSON object here
    // 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // handle error
}];

答案 3 :(得分:0)

获取:使用get方法,值将通过附加url的查询字符串发送。因此,当页面在浏览器中显示时,您可以在地址栏上看到名称,值和描述。

发布:此方法通过完整表单传输信息。您无法在地址栏上看到详细说明。页面显示时。

答案 4 :(得分:-1)

NSString *myUrlString =[NSString stringWithFormat: @"your url];
NSString *postdata=[NSString stringWithFormat:@"emailId=%@&password=%@,username,password];
NSLog(@"%@",postdata);

//create a NSURL object from the string data
NSURL *myUrl = [NSURL URLWithString:myUrlString];

//create a mutable HTTP request
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:myUrl];
//sets the receiver’s timeout interval, in seconds
[urlRequest setTimeoutInterval:30.0f];
//sets the receiver’s HTTP request method
[urlRequest setHTTPMethod:@"POST"];
//sets the request body of the receiver to the specified data.
[urlRequest setHTTPBody:[postdata dataUsingEncoding:NSUTF8StringEncoding]];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//Loads the data for a URL request and executes a handler block on an
//operation queue when the request completes or fails.
[NSURLConnection
 sendAsynchronousRequest:urlRequest
 queue:queue
 completionHandler:^(NSURLResponse *response,
                     NSData *data,
                     NSError *error) {
     if ([data length] >0 && error == nil){
         //process the JSON response
         //use the main queue so that we can interact with the screen
         dispatch_sync(dispatch_get_main_queue(), ^{
             [self parseResponse:data];
         });
     }
     else if ([data length] == 0 && error == nil){
         NSLog(@"Empty Response, not sure why?");
     }
     else if (error != nil){
         NSLog(@"Not again, what is the error = %@", error);
     }
 }];
}

- (void) parseResponse:(NSData *) data
{
   responseData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"JSON = %@", responseData);
    NSLog(@"Response ==> %@", responseData;

最后你得到了那个特定网址的回复。你想做的就是你自己的方式。