我不确定发生了什么,但可能是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
>
我做错了吗?任何帮助都会很棒。
答案 0 :(得分:1)
AFNetworking已经为您解析了JSON(因为manager
的默认responseSerializer
是AFJSONResponseSerializer
)。您正在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}}