16

我正在关注来自 web 服务 api 的 json 响应。我想从 json 中提取产品数据。我也想使用 AFNetworking 来实现它。

 {"products": [
    {
      "product_id": "1170",
      "name": "zzzz®",
      "sort_order": 0,
      "brand": "zzzas",
      "product_category_id": "1090",
      "location_ids": [
        "1078"
      ],
      "icon_url": "http://zzzzz.com/media/2502/zzzz.png",
      "icon_date": "Wed, 07 Nov 2012 14:03:47 GMT",
      "thumbnail_url": "http://zzzz.com/media/2591/zzdfs.png",
      "thumbnail_date": "Wed, 07 Nov 2012 14:04:02 GMT"
    },
    {
      "product_id": "1126",
      "name": "ddddd®",
      "sort_order": 1,
      "brand": "dddsas",
      "product_category_id": "1110",
      "location_ids": [
        "1095"
      ],
      "icon_url": "http://zzzzz.com/media/2507/ddddd.png",
      "icon_date": "Wed, 07 Nov 2012 14:03:48 GMT",
      "thumbnail_url": "http://zzzzz.com/media/2596/sssds.png",
      "thumbnail_date": "Wed, 07 Nov 2012 14:04:05 GMT"
    }
]}

任何人都可以建议一种方法来做到这一点,.我将如何完成这些事情。

4

7 回答 7

36
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"link"]];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSDictionary *jsonDict = (NSDictionary *) JSON;
        NSArray *products = [jsonDict objectForKey:@"products"];
        [products enumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop){
            NSString *productIconUrl = [obj objectForKey:@"icon_url"];
        }];

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response,
        NSError *error, id JSON) {
            NSLog(@"Request Failure Because %@",[error userInfo]); 
    }
];

[operation start];

尝试这个。

更新 1:你可以试试这个https://github.com/SSamanta/SSRestClient

更新 2:https ://github.com/SSamanta/SSHTTPClient (使用 Swift)

可用吊舱: pod 'SSHTTPClient', '~>1.2.2'

于 2012-11-20T13:34:47.843 回答
13

如果您使用的是 AFNetworking 3.0,AFJSONRequestOperation则不再存在,您必须使用AFHTTPSessionManager

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
于 2016-01-06T20:50:54.300 回答
4

要使用 AFNetworking 解析 JSON,只需创建一个子类并在初始化期间添加以下内容。

[self registerHTTPOperationClass:[AFJSONRequestOperation class]];

然后调用 like 方法GET:parameters:completion:将调用完成块,并以 anNSDictionary作为response参数(假设 JSON 有效)。

要下载图像,假设您要显示它们,请查看UIImageView+AFNetworking

于 2012-11-20T13:31:35.613 回答
3

如果您刚刚开始,我建议您使用RestKit来完成此任务(它使用 AFNetworking)。请参阅此处的示例。

于 2012-11-20T13:20:44.010 回答
1

请查看 AFNetworking 的示例 https://github.com/AFNetworking/AFNetworking/tree/master/Example

对于图片下载,EGOCache & EGOImageLoading 可能是不错的选择 https://github.com/enormego/EGOImageLoading

于 2012-11-20T13:39:07.377 回答
0

使用JSONModel将 json 解析为对象。

于 2013-12-13T06:50:02.853 回答
0

首先,为了运行 AFNetworking,您首先需要安装“CocoaPods”。这是什么?CocoaPods 是一个 Objective-C 的依赖管理器,它使得安装第三方库作为 AFNetworking 更加快速和安全。它以 Ruby Gem 的形式提供,您可以通过以下方式安装:

打开终端并执行以下命令:

sudo gem install cocoapods -V

要有耐心。此命令可能需要一些时间才能完成,因此“-V”选项将为您提供详细的数据。

接下来我们执行:

pod setup

这设置了我们的 CocoaPods 安装。

现在我们必须创建一个 PodFile,它将作为 CocoaPods 的配置文件。

回到终端,我们编写以下命令:

touch Podfile
open -e Podfile

第一个命令将使用 Unix 触摸编辑器创建一个名为“Podfile”的文件。第二行将打开这个新创建的文件进行编辑。现在,您应该会看到一个空的 TextEdit 窗口打开。现在我们将以下内容粘贴到该文件中:

platform :ios, '7.0'
pod "AFNetworking", "~> 2.0"

现在是时候设置我们的 Cocoa 工作环境了。重要提示:请确保使用终端中的“cd”命令在 XCODE 项目的当前目录中更改您的终端目录。例子:

cd /user/xcode/myproject

确定您位于正确的目录后,请执行以下终端命令:

pod setup

然后我们通过编写将依赖项安装到我们的项目中:

pod install

现在,这是一个重要的注意事项:由于您正在尝试安装以前不在当前 Xcode 项目中的项目,因此您必须为当前 Xcode 项目创建一个工作区(如果您还没有这样做的话。)创建一个工作区为您的 Xcode 项目执行以下操作:

File > Save Workspace

完成后,导航到 Xcode 工作区文件的目录并执行以下命令:

open YourProjectName.xcworkspace

现在您可以在任何文件的开头使用“import”来访问 AFNetworking 的内置 API 功能。

于 2014-07-28T13:52:58.040 回答