14

AFNetworking を使用して JSON リクエストを送信しようとしていますが、値を の json 形式に変換する際に問題があります{"value": true}。代わりに、私は得ています:{"value": 1}

基本的に、リクエストを作成する方法は次のとおりです。

NSMutableURLRequest *request =
    [self.httpClient requestWithMethod:@"POST"
                                  path:url
                            parameters:@{@"value": @YES}];

AFJSONRequestOperation *operation =
    [AFJSONRequestOperation JSONRequestOperationWithRequest:request ...];
    [operation start];

ここで些細なことを見逃していますか?:)

4

5 に答える 5

14

簡単な回答: AFNetworking の最新バージョンを実行していることを確認してください。あなたが提供したコードに基づいて問題として私が見ることができるのはそれだけです。

長い回答: AFNetworking の最新バージョンで説明している問題を再現しようとしましたが、できませんでした。AFNetworking を掘り下げて、JSON のエンコードがどのように行われるかを確認しました。AFHTTPClient.m:442は、NSJSONSerializationを使用して JSON 要求をエンコードします。問題をテストするために、次のコードを思いつきました。

NSError* error = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@{@"value" : @YES} options:0 error:&error];
NSLog(@"Resulting JSON:\n\n%@\n", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);

出力:

{"value":true}

だから@YESやるべき。の代わりにとして出力されるため、コードでは使用しないでください。@(YES)1true

NSError* error = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@{@"value" : @(YES)} options:0 error:&error];
NSLog(@"JSON:%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);

出力:

{"value":1}

1それで、 /0の代わりにtrue/として bool を送信するように AFHTTPClient を構成する必要がある方法を見つけようとしましたが、false何も見つかりませんでした。これが私のネットワーキングコードです。

AFHTTPClient* httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://<SERVER HERE>"]];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
NSMutableURLRequest *jsonRequest = [httpClient requestWithMethod:@"POST" path:@"/" parameters:@{@"value": @YES}];

AFHTTPRequestOperation *jsonOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:jsonRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    NSLog(@"Success");
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    NSLog(@"Failure");
}];
[jsonOperation start];
于 2012-12-24T18:19:06.633 に答える
3

@YES は NSNumber であるため、NSJSONSerialization はこれを 0/1 にします。

@{@"value": (yesOrNo ? @"true" : @"false")}別のシリアル化クラスを使用する以外の方法はないと思います。

于 2012-12-24T18:52:26.120 に答える
1

この問題に直面している可能性がある人には、別の理由が考えられます。

サブクラスのparameterEncodingプロパティを必ず に設定してください。そうしないと、NSNumber の初期化値が正しく検出されないという問題が発生し、代わりにエンコーダによって 0 と 1 が出力されます。AFHTTPClientAFJSONParameterEncoding

こちら参考にどうぞ。

お役に立てれば。

于 2013-07-28T00:20:34.310 に答える