2013-02-13 2 views
1

До сих пор все, с чем я работал, получает данные от restAPI, используя json в объекте-c (используя классы SBJson). Теперь я пытаюсь отправить данные сообщения, но у меня нет опыта с ним. Сырое тело выглядит примерно так:json data custom http request

//http://www.myapi.com/api/user=123 
    "Username": "foo", 
    "Title": null, 
    "FirstName": "Nick", 
    "MiddleInitial": null, 
    "LastName": "Foos", 
    "Suffix": null, 
    "Gender": "M", 
    "Survey": { 
     "Height": "4'.1\"", 
     "Weight": 100, 
       } 

Каким будет этот способ?

ответ

1

Допустим, у вас есть почтовые данные в строке, называется myJSONString. (Получение из коллекций Objective-C в json также прямолинейно. Похоже, @Joel ответил на это).

// build the request 
NSURL *url = [NSURL urlWithString:@"http://www.mywebservice.com/user"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
request.HTTPMethod = @"POST"; 

// build the request body 
NSData *postData = [myJSONString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
[request setHTTPBody:postData]; 
[request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

// run the request 
[NSURLConnection sendAsynchronousRequest:request 
            queue:[NSOperationQueue mainQueue] 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
          if (!error) { 
           // yay 
          } else { 
           // log the error 
          } 
         }]; 
+0

Благодарим за отзыв. У меня вопрос. Я также должен отправить уникальный ключ в качестве заголовка клиента. Как я пошлю его также отправить? – bardockyo

+0

Конечно. [request setValue: @ "value" forHTTPHeaderField: @ "key"]; – danh

1

Вам нужен словарь с записями для каждого ключа выше, а затем преобразовать словарь в строку JSON. Обратите внимание, что ключ Survey - это словарь. Что-то вроде этого.

NSMutableDictionary *dictJson= [NSMutableDictionary dictionary]; 
[dictJson setObject:@"foo" forKey:@"Username"]; 
... 
[dictJson setObject:dictSurvey forKey:@"Survey"]; 

//convert the dictinary to a JSON string 
NSError *error = nil; 
SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init]; 
NSString *result = [jsonWriter stringWithObject:dictJson error:&error]; 
[jsonWriter release]; 
+0

Большое спасибо за ответ. Я понятия не имел, как подойти к опросам диктата. Это будет работать. – bardockyo