数据从JSON文档中读取处理的过程称为“解码”过程,即解析和读取过程,来看一下如果利用AFNetworking框架去管理从聚合数据上面请求到的数据。

一、下载并导入AFNetworking框架

这部分内容如果不了解的话可以点击iOS开发之网络编程篇六:AFNetworking3.0使用简介

二、聚合数据API-餐饮美食

1.申请餐饮美食API:https://www.juhe.cn/docs/api/id/45

聚合数据API用法简介

2.请求体介绍

lng和lat参数表示对应的经纬度,用来确定你想要请求哪个地方的美食餐饮,key参数即为APPKEY,你申请该API以后可以到应用详细页查询,dtype参数是用来确定你想得到的数据是什么格式的,默认为JSON,如果想要xml格式就需要设置该参数。

3.返回值介绍

该餐饮美食API会返回上图所示的参数,可以根据实际需要来使用。

三、发送网络请求

1.知道API需要请求的参数以后,就可以通过接口地址和API文档中给出的请求方式,请求到所需的数据。

2.根据餐饮美食API的接口文档我们知道需要用get方式去请求。

 NSMutableDictionary *params=[NSMutableDictionary dictionary];
//在数组里面添加请求参数
params[@"key"] = @"987d0c7bd487209bd5bb4065b3d4fcc2";
params[@"lng"] = @"121.538123";
params[@"lat"] = @"31.677132";
//创建请求管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//发送请求,使用get,请求成功以后返回的数据会存放到responseObject中
[manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
//在请求成功以后程序会执行success
//此处可以对请求到的数据进行处理
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];
}

四、解析返回的数据

1.我们发送网络请求以后会返回下图所示的数据:

从图中我们可以看到发送请求以后返回了一个字典,字典中result关键字对应的数组就是我们想要得到的数据,我们项目中需要用到该数组中navigation参数对应的数据,那我就可以遍历result关键字对应的数组,找到navigation参数对应的数据,然后将其存放到一个新的数组中。

[manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
//新建一个字典来存放返回的数据
NSMutableDictionary *datasouce=[responseObject mutableCopy];
//在返回的字典中,将关键字result索引到的数据存放到另外的数组中
NSArray * resultArray = [datasouce objectForKey:@"result"];
//遍历resultArray数组得到navigation对应的数据,并存放到result数组中
for (NSDictionary *dic in resultArray) {
NSString *navigation = [dic objectForKey:@"navigation"];
[result addObject:navigation];
}
[self.delegate data:result];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@",error);
}];
}

2.创建一个继承于NSObject的Data类,用来得到从聚合数据上面请求到的数据,并在Data.h文件中添加相应的属性方法

-(void) getdata;//在ViewController中执行此方法从而得到JSON数据

3.在Data.m文件中完成相应的属性方法

-(void) getdata{
__block NSMutableArray *result = [[NSMutableArray alloc] init];
NSMutableDictionary *params=[NSMutableDictionary dictionary];
//在数组里面添加请求参数,根据聚合数据的文档说明添加
params[@"key"] = @"987d0c7bd487209bd5bb4065b3d4fcc2";
params[@"lng"] = @"121.538123";
params[@"lat"] = @"31.677132";
//创建请求管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//发送请求
[manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
//如果数据请求成功返回到responseObject中
NSMutableDictionary *datasouce=[responseObject mutableCopy];
//在返回的字典中通过关键字result索引到的数据存放到另外的数组中
NSArray * resultArray = [datasouce objectForKey:@"result"];
//遍历resultArray数组得到navigation对应的数据
for (NSDictionary *dic in resultArray) {
NSString *navigation = [dic objectForKey:@"navigation"];
[result addObject:navigation];
}
[self.delegate data:result];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@",error);
}];
}

4.创建一个DataDelegate协议,并添加相关的代理方法,用来传递JSON数据。

#import <Foundation/Foundation.h>
@protocol DataDelegate //通过代理将得到的JSON数据传递到ViewController
- (void) data: (NSMutableArray *)array;
@end
@interface Data : NSObject
@property (nonatomic, weak) id <DataDelegate> delegate;//代理属性
-(void) getdata;
@end

五、在TableView上面显示得到的JSON数据

1.添加相关的属性以及代理协议

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,DataDelegate>
@property (nonatomic, strong) UITableView *myTableView;
@property (nonatomic, strong) NSArray *myArray;//用来存放JSON数据的数组
@property (nonatomic, strong) Data *myData;
@end

2.使懒加载方式初始化所需的控件以及数组

- (Data *)myData{
if (!_myData) {
_myData = [[Data alloc] init];
_myData.delegate = self;
[_myData getdata];
}
return _myData;
}
- (NSArray *) myArray{
if (!_myArray) {
_myArray = [[NSArray alloc ] init];
}
return _myArray;
}
- (UITableView *) myTableView{
if (!_myTableView) {
_myTableView = [[UITableView alloc] initWithFrame:self.view.frame];
_myTableView.dataSource = self;
_myTableView.delegate = self;
[self.view addSubview: _myTableView];
}
return _myTableView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self myArray];
[self myData];
[self myTableView];
}

3.在tableView的数据源方法中将得到的JSON数据显示到tableView上面

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.myArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
if (self.myArray != nil && self.myArray.count > 0) {
cell.textLabel.text = [self.myArray objectAtIndex:[indexPath row]];
}
return cell;
}

4.由于tableView的数据源方法会先执行,因此我们需要在Data的代理方法中得到JSON数据以后刷新tableView。

- (void)data:(NSMutableArray *)array{
self.myArray = array;
[self.myTableView reloadData];
}

示例代码

http://pan.baidu.com/s/1skJUHPF

利用AFNetworking框架去管理从聚合数据上面请求到的数据的更多相关文章

  1. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...

  2. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...

  3. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...

  4. J2EE进阶(七)利用SSH框架根据数据表建立model类

    J2EE进阶(七)利用SSH框架根据数据表建立model类 前言 在利用SSH框架进行项目开发时,若将数据库已经建好,并且数据表之间的依赖关系已经确定,可以利用Hibernate的反转功能进行mode ...

  5. (三十六)利用AFNetworking进行JSON数据解析

    1.首先要安装CocoaPods,然后在需要AFNetworking的工程根目录建立podfile,内容如下: platform :ios, '7.0' pod 'AFNetworking' 2.然后 ...

  6. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  7. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

  8. 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model

    利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model   使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...

  9. 【转】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

随机推荐

  1. 我的第一个python程序——猜数字

    #Author:xiaoxiao age = 22 #标准正确答案 counter = 0 #计数器 for i in range(10): #循环10次 if counter < 3: gue ...

  2. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  3. LAMP第一部分安装mysql -apache -php

    1. 安装mysqlcd /usr/local/src/ 免安装编译二进制的包wget http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-l ...

  4. cf 853 B Jury Meeting [前缀和]

    题面: 传送门 思路: 看完题目以后,首先有一个结论:每个人都是先去到首都,等待开会,开会结束以后再一个个走掉 而且这道题只有去首都和离开首都的机场 因此考虑计算去首都的飞机的前缀最小花费,以及离开首 ...

  5. 满汉全席(banquet)

    满汉全席(banquet) 题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做 ...

  6. Chrome 浏览器访问 Google 学术出现问题 “but your computer or network may be sending automated queries. ”

    问题: Chrome 浏览器访问 Google 学术出现如下的问题 : ... but your computer or network may be sending automated querie ...

  7. django model:auto_now_add 和 auto_now

    创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime().date().time()三中对象 ...

  8. 股票交易(bzoj 1855)

    Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价 ...

  9. pat 甲级 1056. Mice and Rice (25)

    1056. Mice and Rice (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Mice an ...

  10. linux之eval

    1. eval command-line 其中command-line是在终端上键入的一条普通命令行.然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次.如: pipe=&qu ...