【发布时间】:2013-08-22 22:02:50
【问题描述】:
我正在尝试通过 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 时出现错误。任何建议都非常感谢!
【问题讨论】:
-
我不知道服务器期望什么,但通常情况下,JSON 中的每个项目都有一个键,包括数组。您现在只是发送数组,没有密钥。试试 `NSString *cartJSON = @"'products':%@", [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:objectsInCart options:NSJSONWritingPrettyPrinted error:&error] encoding:NSUTF8StringEncoding];
-
如果查看
parameters字典,数组的键是@"orders" -
好吧,我错过了。您是否查看了通过线路发送的实际数据?我非常看重像 Charles 代理这样的应用程序,它可以拦截从我的应用程序到外部服务器的所有流量。
-
为了将来参考使用 AFNetworking 2.xx 的其他人,您不必将任何数组或字典序列化为 JSON,只需将它们原样传递给您的 AFHTTPRequestOperationManager,AFNetworking 将处理所有的东西。但不要忘记在接受的答案中添加
manager.requestSerializer = [AFJSONRequestSerializer serializer];。
标签: ios arrays json post afnetworking