1

JSON のデータ表現を HTTP 本体にすることで、JSON をアプリの POST Web サービスへの引数として使用することに成功しました。

    //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];

これはうまくいきます。

問題は、これが単一の JSON 引数を http 本文として期待している Web サービスに対して機能することです。

@"arg1=val1&arg2=val2" のデータ エンコーディングを使用できるように、多くの引数の 1 つとして JSON を含めるにはどうすればよいですか。

例:次のようなものを期待するWebサービスがある画像

    http://mysite.com/api/v1/route/test?data={json:%22true%22}&other=abcdefg

これは POST として提出する必要があります。

興味深いことに、これには多くの引数の 1 つのみとして JSON ディクショナリがあり、本体にはありません。これらの引数を投稿に追加する方法がわかりません。

編集

これはphpの同じ概念です。ココアでこれをどのように行いますか?

$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);
4

0 に答える 0