AFNetworking and jSON

2019-02-01 22:41发布

问题:

I am getting following the json response from a web-service api. I want to extract product data from the json. I also want to implement this using 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"
    }
]}

Can anyone suggest a way to do this.me how the things will be done.

回答1:

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];

Try this.

Update 1: You can try this https://github.com/SSamanta/SSRestClient

Update 2: https://github.com/SSamanta/SSHTTPClient (Using Swift)

Available Pod : pod 'SSHTTPClient', '~>1.2.2'



回答2:

if you're using AFNetworking 3.0, AFJSONRequestOperation doesn't exist anymore, you have to use 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);
}];


回答3:

To parse JSON with AFNetworking, just create a subclass and add the following during initialization.

[self registerHTTPOperationClass:[AFJSONRequestOperation class]];

Then calling a method like GET:parameters:completion: will call the completion block with an NSDictionary as the response parameter (assuming the JSON is valid).

To download the images, assuming you want to display them, check out UIImageView+AFNetworking.



回答4:

If you are just starting, I'd recommend using RestKit for this task (it makes use of AFNetworking). See an example here.



回答5:

Please check the example of AFNetworking https://github.com/AFNetworking/AFNetworking/tree/master/Example

For image downloading, EGOCache & EGOImageLoading may be a good choice https://github.com/enormego/EGOImageLoading



回答6:

Use JSONModel to parse json into object.



回答7:

First, in order to run AFNetworking you will first need to install “CocoaPods“. What is this? CocoaPods is a dependency manager for for Objective-C which makes installing third party libraries as AFNetworking much more faster and secure. It is provided as a Ruby Gem which you can install the following way:

Open up the terminal and execute the following commands:

sudo gem install cocoapods -V

Be patient. This command can take some time to finish, so the “-V” option will provide you with detailed data what’s going on.

Next we execute:

pod setup

Which sets up our CocoaPods installation.

Now we have to create a PodFile which will server as our config file for CocoaPods.

Back to the terminal and we write the following commands:

touch Podfile
open -e Podfile

The first command will create a file named “Podfile” with the Unix touch editor. The second line will open this newly created file for editing. By now, you should see an empty TextEdit window opened. Now we paste the following inside this file:

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

Now it is time to set up our Cocoa working environment. IMPORTANT: Please make sure to change your directory with your terminal at your XCODE PROJECT’S CURRENT DIRECTORY by using the ‘cd’ command in the terminal. Example:

cd /user/xcode/myproject

Once you are sure that you are at the proper directory execute the following terminal command:

pod setup

And then we install the dependencies to our project by writing:

pod install

Now, this is an important note: Since you are trying to install a project which was previously not inside your current Xcode project you have to create a Workspace for your current Xcode project (if you have not done this already.) To create a workspace for your Xcode project do the following:

File > Save Workspace

Once you are done, navigate to the directory of your Xcode workspace file and execute the following command:

open YourProjectName.xcworkspace

Now you can just use “import ” at the beginning of any of your files to access the builtin API functionalities of AFNetworking.