iOS:POST,其中JSON只是众多参数中的一个

时间:2013-01-17 04:13:03

标签: ios json cocoa post

我已经成功地使用JSON作为我的应用程序中POST Web服务的参数,方法是将JSON的数据表示为HTTP正文:

    //Prep
    NSData *requestData = [NSJSONSerialization dataWithJSONObject:<my JSON> options:0 error:nil];
    NSString *apiString = <the webservice>;

    //POST
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:apiString]];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:requestData];

    //Go
    NSURLResponse *response = nil;
    queryResultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

哪个效果很好。

麻烦的是,这适用于Web服务,它希望将单个JSON参数作为http主体。

如何将JSON作为众多参数之一,使用@“arg1 = val1&amp; arg2 = val2”的数据编码方式。

例如:图片您有一个期望像

这样的网络服务
    http://mysite.com/api/v1/route/test?data={json:%22true%22}&other=abcdefg

必须以POST身份提交。

有趣的是,这有一个JSON字典只是很多人的一个参数,而不是在那里。我无法弄清楚如何将这些参数添加到帖子中。

修改

这是php中的相同概念。你如何在Cocoa中做到这一点?

$data = array('x' => 1, 'name => 'fred');

$json = json_encode($data);

curl_setopt($curl_handle, CURLOPT_POSTFIELDS, array('json_data' => $json));
 -- or --
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, 'something=whatever&json_data='.$json);

0 个答案:

没有答案