【问题标题】:AFNetworking and jSONAFNetworking 和 JSON
【发布时间】:2023-03-14 21:48:01
【问题描述】:

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

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

【问题讨论】:

    标签: ios json afnetworking


    【解决方案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];
    

    试试这个。

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

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

    可用的 Pod: pod 'SSHTTPClient', '~>1.2.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);
    }];
    

    【讨论】:

      【解决方案3】:

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

      [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
      

      然后调用像GET:parameters:completion: 这样的方法将调用带有NSDictionary 作为response 参数的完成块(假设JSON 是有效的)。

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

      【讨论】:

      • 我还想下载一些非常大的 pdf 文件和一些视频。我想我对那些有问题
      • 只注册http操作类是不足以获取json响应数据的。完整的步骤是:[self registerHTTPOperationClass:[AFJSONRequestOperation class]]; 和 [self setDefaultHeader:@"Accept" value:@"application/json"]。指here
      • @jianpx 这取决于您正在与之交谈的服务器以及您是否想要所有请求的 JSON 响应。如果你这样做,那么一定要设置标题。
      【解决方案4】:

      如果您刚刚开始,我建议您使用 RestKit 来完成此任务(它使用 AFNetworking)。查看示例here。

      【讨论】:

      • 我认为 rest kit 对于我的应用来说太复杂了
      • RestKit 现在看起来确实有些臃肿。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        使用JSONModel将json解析成对象。

        【讨论】:

          【解决方案7】:

          首先,为了运行 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 功能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-05
            • 1970-01-01
            • 2013-11-28
            • 1970-01-01
            相关资源
            最近更新 更多