我正在尝试发布一个期望将JSON数组作为输入的API,例如:
[
{
"token": "bd3",
"display_order": 0
}
]
我无法让AFJSONRequestSerializer生成这个,我的代码创建了参数:
NSDictionary *campParams = @{@"token" : @"bd3", @"display_order" : @"0" };
NSArray *arr = [NSArray arrayWithObject:campParams];
NSDictionary *final = [NSDictionary dictionaryWithObject:arr forKey:@""];
将JSON创建为:
{"":[{"token":"bd55","display_order":"0"}]}
如何修改代码以获得正确的JSON输出?我正在创建第二个字典,因为AFHTTPRequestOperationManager接受参数作为字典,而不是数组。
[manager PUT:url parameters:final success:^(AFHTTPRequestOperation *operation, id responseObject) {
//done
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
答案 0 :(得分:2)
不要添加最后一个字典操作,问题显示需要JSON数组..
NSArray * jsonArray = @[ @{ @"token" : @"bd3", @"display_order" : @"0" } ];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonArray options:0 error:&error];
NSLog(@"jsonData as String: %@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
输出:
jsonData as String: [{"token":"bd3","display_order":"0"}]
最后一个参数可能是一个数字,而不是一个字符串:
NSArray * jsonArray = @[ @{ @"token" : @"bd3", @"display_order" : @0 } ];
生产:
jsonData as String: [{"token":"bd3","display_order":0}]
更符合您最初的JSON示例。
这是一个例子,但没有使用AFNetworking,因为我不熟悉它:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPBody:jsonData];
[request setHTTPMethod:@"POST"];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue currentQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError) {
NSLog(@"Error: %@", connectionError);
}
else {
NSLog(@"data as String: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
}];
注意:一定要使用AFNetworking,这太棒了!我只是熟悉旧的OSX / iOS方法,而且我没有安装AFNetworking的测试项目。
答案 1 :(得分:1)
我的解决方案是简单地更改请求序列化程序,我不知道默认情况下它没有使用JSON,所以我更改了它,现在它可以工作。