AFNetworking和jSON

我正在关注来自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" } ]} 

谁能建议一种方法来做到这一点. 我将如何做到这一点。

 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: pod 'SSHTTPClient', '~>1.2.2'

如果你正在使用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); }]; 

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

 [self registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

然后调用类似GET:parameters:completion:的方法GET:parameters:completion:将使用NSDictionary作为response参数调用完成块(假设JSON有效)。

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

如果您刚刚开始,我建议使用RestKit执行此任务(它使用AFNetworking)。 在这里查看示例。

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

对于图像下载,EGOCache和EGOImageLoading可能是一个不错的选择https://github.com/enormego/EGOImageLoading

使用JSONModel将json解析为对象。

首先,为了运行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 touch编辑器创建名为“Podfile”的文件。 第二行将打开此新创建的文件以进行编辑。 到现在为止,您应该看到一个空的TextEdit窗口已打开。 现在我们将以下内容粘贴到此文件中:

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

现在是时候建立我们的Cocoa工作环境了。 重要提示:请确保使用终端中的“cd”命令在XCODE PROJECT’S CURRENT DIRECTORY中使用终端更改目录。 例:

 cd /user/xcode/myproject 

一旦确定自己位于正确的目录,请执行以下terminal命令:

 pod setup 

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

 pod install 

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

 File > Save Workspace 

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

 open YourProjectName.xcworkspace 

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