iPhone отправляет Json Array через POST - PullRequest
3 голосов
/ 10 мая 2011

Мне нужно отправить на наш сервер следующий массив JSON через POST :

task:{"id":"123","list":"456","done":1,"done_date":1305016383}

Я пытался с библиотекой JSON , но я был как-то глуп, чтобы использовать его. Я даже пытался создать POST-строку самостоятельно, но также не смог:

NSString *post = @"task='{id:123,list:456,done:1,done_date:1305016383}'";

NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url 
                                               cachePolicy:NSURLRequestReloadIgnoringCacheData    
                                            timeoutInterval:30];

[request setHTTPMethod:@"POST"];    
[request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding]];
....

Не могли бы вы мне помочь? Строка POST в формате json будет для меня даже достаточной:)

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Так что это может быть, а может и не быть вопросом, который вы задаете, но ваша строка JSON сформирована неправильно. Массив «задачи» в формате JSON будет выглядеть так:

NSString *post = @"{"task":[{"id":"123","list":"456","done":1,"done_date":1305016383}]}";

Я просто боролся с аналогичной ситуацией при отправке на сервер PHP, и я не мог найти никаких вопросов по этому поводу в Интернете, но это то, что мне пришлось бы делать, если бы я публиковал те же данные:

NSString *post = @"task[0][id]=123&task[0][list]=456&task[0][done]=1&task[0][done_date]=1305016383&";

NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url 
                                           cachePolicy:NSURLRequestReloadIgnoringCacheData    
                                        timeoutInterval:30];

[request setHTTPMethod:@"POST"];    
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding]];
...

Удачи!

1 голос
/ 10 июля 2012

Вот как я это делаю:

-(void)imageFactory:(NSDictionary*)postJSON
{
    // Convert the JSON string to Data to be sent.
    NSData* postData = [[postJSON JSONRepresentation] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:[URLManager imageFactory]]];
    [request setHTTPMethod:@"POST"];
    [request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];
    // IMPORTANT MAKE SURE YOU ADD THIS LINE SO THE SERVER KNOWS WHAT ITS GETTING
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    // Add some nice handlers so you know what you got from the server
    NSURLResponse* response;
    NSHTTPURLResponse* httpResponse;
    NSError* error;
    NSData* responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString* stringResponse = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];

    httpResponse = (NSHTTPURLResponse*) response;
    int statuscode = [httpResponse statusCode];

    if (statuscode == 200)
    {
        log4Debug(@"ImageFactory Response Successful, Retrieving image");
        // Handle the response here if needed
    }
    else
    {
        log4Error(@"ImageFactory Response Failed: %@", stringResponse);
        // Show some form of alert here if needed
    }
    // release all objects saved to memory
    [request release];
    request = nil;
    [stringResponse release];
    stringResponse = nil;
}

Мой json - это строка, которая выглядит следующим образом: {"user": 1337, "title": "Some title", "itemKeys": [1, 1,1,1,1]}

0 голосов
/ 10 мая 2011

Полагаю, проблема не в методах, а в строке, которую вы пытаетесь опубликовать. Попробуйте это:

NSString *post = @"\"task\":{\"id\":\"123\",\"list\":\"456\",\"done\":1,\"done_date\":1305016383}";

Другими словами: эксперимент с кавычками.

Какую библиотеку JSON вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...