AFNetworking在发送请求的JSON参数中发送数组

我试图通过POST发送参数到我的服务器,它通常工作,但我不知道如何发送包含数组的JSON作为参数之一。 以下是我所尝试的:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:myURL]]; NSMutableArray *objectsInCart = [NSMutableArray arrayWithCapacity:[_cart count]]; for(NSDictionary *dict in _cart) { NSObject *object = [dict objectForKey:@"object"]; NSDictionary *objectDict = @{@"product_id": [NSString stringWithFormat:@"%d",[object productID]], @"quantity": [NSString stringWithFormat:@"%d", [[dict objectForKey:@"count"] intValue]], @"store_id": [NSString stringWithFormat:@"%d", [Store getStoreID]], @"price": [NSString stringWithFormat:@"%.2f", [object price]]}; [objectsInCart addObject:objectDict]; } NSError *error = nil; NSString *cartJSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:objectsInCart options:NSJSONWritingPrettyPrinted error:&error] encoding:NSUTF8StringEncoding]; if(error) { NSLog(@"Error serializing cart to JSON: %@", [error description]); return; } NSDictionary *parameters = @{@"status": @"SUBMITTED", @"orders": cartJSON}; NSMutableURLRequest *orderRequest = [httpClient requestWithMethod:@"POST" path:@"/app/carts" parameters:parameters]; AFJSONRequestOperation *JSONOperation = [[AFJSONRequestOperation alloc] initWithRequest:orderRequest]; 

但是,发送此JSON时出现错误。 任何build议,非常感谢!

我没有看到你指定的地方你想发布JSON,所以我打赌你正在发送表单URL参数编码,根据AFHTTPClient文档:

如果查询string对的值为NSArray ,则数组中的每个成员都将以格式field[]=value1&field[]=value2 。 否则,这一对将被格式化为“field = value”。 键和值的string表示都是使用-description方法派生的。 构造的查询string不包含? 用于分隔查询组件的字符。

如果您的服务器确实希望您发布JSON,请在第二行添加以告诉AFNetworking:

 // AFNetworking 1.0 // httpClient is a subclass of AFHTTPClient httpClient.parameterEncoding = AFJSONParameterEncoding; // AFNetworking 2.0 // httpClient is a subclass of AFHTTPRequestOperationManager or AFHTTPSessionManager httpClient.requestSerializer = AFJSONRequestSerializer; 

然后,您可以将您的调用移除到NSJSONSerialization ,并将objectsInCart放入parameters字典中。

注意: AFHTTPRequestOperationManagerAFHTTPSessionManager (AFNetworking 2.0)或AFHTTPClient (AFNetworking 1.0)的子类是正常的,并将这种types的configuration放在initWithBaseURL:方法中。 (你可能不想为每个请求启动一个新的客户端。)