2016-09-08 2 views
3

Я новичок в JSON, и я пытаюсь отправить сообщение. Мне интересно, как проверить, правильно ли я это сделал или проверить возвращаемое значение. Вот что я сделалКак проверить возвращаемое значение JSON post

NSURL *url = [NSURL URLWithString:@"http://json.myurl.com/.....]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys: 
        @"email", @"Email", 
        @"password", @"FirstName", 
         nil]; 
NSError *error; 
NSData *postdata = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error]; 
[request setHTTPBody:postdata]; 
+0

Где находится ваш код, который отправляет запрос? – rmaddy

+0

NSURLConnection * соединение = [NSURLConnection connectionWithRequest: запрос делегат: self]; это что-то вроде этого? – drbj

ответ

0

Чтобы проверить JSON POST возвращаемого значения:

NSString *strUrl=[NSString stringWithFormat:@"http://json.myurl.com/....."]; 

NSString *webStringURL = [strUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *url = [NSURL URLWithString:webStringURL]; 


NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 


NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys: 
        @"email", @"Email", 
        @"password", @"FirstName", 
        nil]; 

    NSError* error; 
    NSData* postData = [NSJSONSerialization dataWithJSONObject:tmp options:NSJSONWritingPrettyPrinted error: &error]; 
    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 
    [request setURL:url]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:postData]; 


[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *jsonData, NSError *error) 
{ 

    if (!error) 
    { 

     NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:&error]; 


     dispatch_async(dispatch_get_main_queue(),^ 
         { 

          NSLog(@"jsonResponse--->%@",jsonResponse); 

         }); 
    } 
    else 
    { 

     dispatch_async(dispatch_get_main_queue(),^ 
         { 

          NSLog(@"error--->%@",error.description); 

         }); 

    } 


}]; 

А чтобы проверить вас формат JSON правильно или не пройти через этот link

+0

Этот пример кода работает нормально, но он действительно неэффективен и содержит ненужные вещи внутри. –

+0

Согласно моим знаниям, это один из идеальных способов для запроса JSON POST. Если вы считаете, что у вас есть лишние вещи, пожалуйста, сообщите мне и обновите меня. :) @DaumantasVersockas –

+0

'dispatch_async' совершенно не нужно в этой ситуации. Вы ничего не делаете, для этого необходимо обеспечить удобство использования основной нити. Здесь также не требуется настройка ручного кодирования. Вам действительно нужно настроить длину контента здесь? Кроме того, код может быть написан красивее. Например, зачем писать 'if (error == nil)', если вы можете написать 'if (! Error)' или даже более просто, 'if (error) {} else {}'. Однако запрос сам работает правильно. Извините за критиков, это всего лишь мое личное мнение. Мир! :) –

0

Для новичка, я рекомендовал бы использовать стороннюю структуру, широко используемую разработчиками iOS по всему миру под названием AFNetworking.

С помощью AFNetworking, HTTP запросы просты, как:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

[manager POST:url parameters:parameters progress:nil success:^(NSURLSessionDataTask *task, id responseObject) { 
    // TODO: Parse success here! 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    // TODO: Parse failure here! 
}]; 

В данном примере, объект responseObject является представлением ответа API-объекта JSON.

Инструкции по установке и дальнейшему использованию от AFNetworking можно найти в их website.

Смежные вопросы