使用 AFNetworking 2.5 将 JSON 序列化为 NSArray
Posted
技术标签:
【中文标题】使用 AFNetworking 2.5 将 JSON 序列化为 NSArray【英文标题】:Serializing JSON into an NSArray with AFNetworking 2.5 【发布时间】:2014-12-04 01:22:39 【问题描述】:到目前为止,使用 AFNetworking 2.5 来填充一个数组,其中填充了与 last.fm API 相关的热门曲目的艺术家。这是我目前这样做的代码。
NSURL *url = [NSURL URLWithString:URLstring];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
NSDictionary *dict = (NSDictionary *)responseObject;
NSArray *allValues = [dict allValues];
NSLog(@"all values contained in array: %@", allValues);
NSLog(@"all values count: %lu", allValues.count);
计数返回 1。我想要一个包含曲目的数组,每个索引值对应一个曲目。目前,只有第一个索引值填充在数组中。我还注意到被打印回来的 JSON 数据是 JSON 格式,并且不像打印时会出现 NSArray 中的对象那样出现。
编辑:这里是input
【问题讨论】:
在评论中更新了输入 JSON。 你如何序列化 JSON到一个NSArray?序列化的结果将是某种字符串——char*
、NSString
或 NSData
。
这当然不是合法的 JSON。
【参考方案1】:
使用KVC获取曲目数组:
NSArray* tracks = [dict valueForKeyPath:@"toptracks.track"]
或者类似的东西
【讨论】:
【参考方案2】:从您发布的输入 JSON 来看,实现您所追求的最佳方式是修改以下内容。
将NSArray *allValues = [dict allValues];
更改为
NSDictionary *dict = (NSDictionary *)responseObject;
NSArray *allValues = dict[@"toptracks"][@"track"];
【讨论】:
以上是关于使用 AFNetworking 2.5 将 JSON 序列化为 NSArray的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 和 id reponseObject 不工作且无法恢复内容