使用 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*NSStringNSData 这当然不是合法的 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的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发网络数据之AFNetworking使用

AFNetworking 和 id reponseObject 不工作且无法恢复内容

Swift 中 AFNetworking 2.0 中的 Web 服务调用问题

第三方插件将数据转成json

无法使用 AFNetworking 将阵列发布到服务器

使用 AFNetworking 将图像上传到服务器已损坏