AFNetworking解析requestObject

时间:2014-11-19 20:40:20

标签: objective-c json http nsdictionary afnetworking-2

我不确定发生了什么,但可能是AFJSONSerializer的问题。目前我正在从返回(在浏览器中)的URL中检索JSON数据:

[{"id": 1, "email": "random@gmail.com", "password": "123"}, {"id": 2, "email": "david@gmail.com", "password": "123"}]

然后我使用AFNetworking执行GET请求:

[manager GET:path
    parameters:nil
    success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"%@", responseObject);
        user = [self parseJsonData:responseObject];
    }
    failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

成功块返回的responseObject始终返回:

({"id": 1, "email": "random@gmail.com", "password": "123"}, ...etc...)

注意常规括号而不是方括号。这导致NSDictionary或NSArray的解析失败。我可以看到返回的对象,但我无法将它们解析为各自的类型。事实上,如果我尝试解析NSDictionary,它将显示正确数量的对象,都是空白的。

单击每个索引的检查器图标会出现此错误:

[0] = <error: expected ']'
error: 1 errors parsing expression
>

我做错了吗?任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

AFNetworking已经为您解析了JSON(因为manager的默认responseSerializerAFJSONResponseSerializer)。您正在NSLog responseObject NSArray,这是一个NSArray对象,而不是JSON字符串。当您记录[responseObject class]时,它使用括号而不是方括号。

如果您查看[responseObject isKindOfClass:[NSArray class]]responseObject,就可以确认NSArray已经被解析为NSDictionary *dictionary = responseObject[0]; // get the first dictionary from the array NSNumber *identifier = dictionary[@"id"]; // this will be @(1) NSString *email = dictionary[@"email"]; // this will be @"random@gmail.com" NSString *password = dictionary[@"password"]; // this will be @"123" ,您现在可以直接使用它。


例如,假设AFNetworking已经为您解析了JSON,您现在可以使用生成的对象:

for (NSDictionary *dictionary in responseObject) {
    NSNumber *identifier = dictionary[@"id"]; 
    NSString *email      = dictionary[@"email"];
    NSString *password   = dictionary[@"password"];

    NSLog(@"%@; %@; %@", identifier, email, password);
}

或者你可以遍历数组:

{{1}}