簡短回答: 請確保您正在運行的最新版本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)
,因爲它將以1
而不是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進行配置,以發出一個布爾值作爲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];
由於@YES是一個NSNumber,NSJSONSerialization將其變成0/1。我不認爲除了@ {@「value」:(yesOrNo?@「true」:@「false」)}或使用不同的序列化類以外,還有其他方法。 –
@TalBereznitskey看起來像我的服務器的實現期望布爾值很好地處理了字符串值「true」/「false」!如果你將它作爲答案粘貼,我會接受它:) – abyx