AFJSONRequestSerializer POST JSON数组

时间:2014-07-25 12:04:55

标签: objective-c json afnetworking afnetworking-2

我正在尝试发布一个期望将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);
    }];

2 个答案:

答案 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,所以我更改了它,现在它可以工作。