简短回答:
确保您运行的是最新版本的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)
,因为它会输出为 a1
而不是true
.
NSError* error = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@{@"value" : @(YES)} options:0 error:&error];
NSLog(@"JSON:%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
输出:
{"value":1}
有了这个,我试图弄清楚如何配置 AFHTTPClient 以将 bool 作为1
/0
而不是true
/发送出去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];