利用ASIHTTPRequest请求java服务和JSONKit解析返回的json串
2013-07-10 10:17
711 查看
整ASIHTTPRequest和JSONKit花了我近三个晚上(20点到23点30)的时间,今天终于把后台返回的json串解析出来了,为了模拟真实的调用环境,用spring mvc搭了个简单的java后台服务。提供json数据
运行如下
同步调用、异步调用、块格式调用 说的是用ASIHTTPRequest请求后台的方式。下面有一个按钮是批JSON解析
其实ASIHTTPRequest请求后台都没什么好说的,官方的API说的很清楚,可以看看官方的how to use
时间主要都花在解析后台返回的数据上了。
下面上代码
controller.h文件
ASIHTTPRequest的使用就不写了,官方都有
下面看看调用后台的吧 ,
先贴一下,java端返回的数据:
[
{
"name": "北京",
"id": 1,
"routes": [
{
"id": 1,
"content": "北京一日游,好玩",
"days": 1,
"title": "北京一日游",
"startDate": 1348070400000,
"endDate": 1345392000000,
"scenerySpot": "天安门、长城",
"price": 168,
"districtId": 1,
"bigImgId": 1,
"samllImgId": 1,
"specialPrice": 1,
"routeDate": null,
"clickCount": null,
"isRecommend": null
},
{
"id": 2,
"content": "北京长城 十三陵一日游",
"days": 1,
"title": "北京长城 十三陵一日游",
"startDate": 1345478400000,
"endDate": 1345478400000,
"scenerySpot": "长城 十三陵",
"price": 190,
"districtId": 1,
"bigImgId": 1,
"samllImgId": 1,
"specialPrice": 1,
"routeDate": null,
"clickCount": null,
"isRecommend": null
}
]
},
{
"name": "上海",
"id": 2,
"routes": []
},
{
"name": "湖南",
"id": 3,
"routes": []
},
{
"name": "湖北",
"id": 4,
"routes": []
},
{
"name": "浙江",
"id": 5,
"routes": []
},
{
"name": "江苏",
"id": 6,
"routes": []
},
{
"name": "福建",
"id": 7,
"routes": []
},
{
"name": "新疆",
"id": 8,
"routes": []
}
]
这个方法是JSONKit远程测试的
复制代码
先用NSUrl构造一个url,然后用ASIHTTPRequest请求,如果没错误的情况下用NSString来接收返回的值
NSString *response = [request responseString];
复制代码
调用JSONKit转成NSArray
[response objectFromJSONString];
复制代码
时间就是花在这了,当时不知道这个地方到底该用什么接收,网上查都说是用NSDictionary,但是用这个就一直报错,后面听群里的网友说,可以用[obj class]来确定是什么类型,试了下,果真好使,,,,到这基本上就没什么问题了 ,哈哈。
当用[obj class]得知返回的数据是Array之后,就直接用NSArray接收就好了,后面什么都通顺了。。。
点击JSONKit远程测试,控制台输出:
运行如下
同步调用、异步调用、块格式调用 说的是用ASIHTTPRequest请求后台的方式。下面有一个按钮是批JSON解析
其实ASIHTTPRequest请求后台都没什么好说的,官方的API说的很清楚,可以看看官方的how to use
时间主要都花在解析后台返回的数据上了。
下面上代码
controller.h文件
#import <UIKit/UIKit.h> #import "ASIHTTPRequest.h" #import "JSONKit.h" @interface ITViewController : UIViewController @property (strong, nonatomic) IBOutlet UILabel *label; //同步调用 - (IBAction)buttonPressed:(id)sender; //异步调用 - (IBAction)asyButtonPressed:(id)sender; //块格式调用 - (IBAction)blockButtonPressed:(id)sender; //JSONKit测试 - (IBAction)jsonKitTestButtonPressed:(id)sender; //JSONKit本地测试 -(IBAction)localJsonKitTest:(id)sender; //JSONKit返回集合数据(集合中都是原始字段的数据) - (IBAction)jsonKitArrayListWithYY:(id)sender; @end复制代码
ASIHTTPRequest的使用就不写了,官方都有
下面看看调用后台的吧 ,
先贴一下,java端返回的数据:
[
{
"name": "北京",
"id": 1,
"routes": [
{
"id": 1,
"content": "北京一日游,好玩",
"days": 1,
"title": "北京一日游",
"startDate": 1348070400000,
"endDate": 1345392000000,
"scenerySpot": "天安门、长城",
"price": 168,
"districtId": 1,
"bigImgId": 1,
"samllImgId": 1,
"specialPrice": 1,
"routeDate": null,
"clickCount": null,
"isRecommend": null
},
{
"id": 2,
"content": "北京长城 十三陵一日游",
"days": 1,
"title": "北京长城 十三陵一日游",
"startDate": 1345478400000,
"endDate": 1345478400000,
"scenerySpot": "长城 十三陵",
"price": 190,
"districtId": 1,
"bigImgId": 1,
"samllImgId": 1,
"specialPrice": 1,
"routeDate": null,
"clickCount": null,
"isRecommend": null
}
]
},
{
"name": "上海",
"id": 2,
"routes": []
},
{
"name": "湖南",
"id": 3,
"routes": []
},
{
"name": "湖北",
"id": 4,
"routes": []
},
{
"name": "浙江",
"id": 5,
"routes": []
},
{
"name": "江苏",
"id": 6,
"routes": []
},
{
"name": "福建",
"id": 7,
"routes": []
},
{
"name": "新疆",
"id": 8,
"routes": []
}
]
这个方法是JSONKit远程测试的
//JSONKit测试 - (IBAction)jsonKitTestButtonPressed:(id)sender{ //本地测试json转对象 // NSString *strJson = @"{\"aps\": {\"alert\":{\"body\":\"a msg come!\"},\"bage\":3,\"sound\":\"def.mp3\"}}"; // NSDictionary *result = [strJson objectFromJSONString]; // NSLog(@"%@",result); //本地测试对象转json //生成json数据 // NSMutableDictionary *jsonDic = [NSMutableDictionary dictionary]; // NSMutableDictionary *alert = [NSMutableDictionary dictionary]; // NSMutableDictionary *aps = [NSMutableDictionary dictionary]; // [alert setObject:@"a msg come!" forKey:@"body"]; // [aps setObject:alert forKey:@"alert"]; // [aps setObject:@"3" forKey:@"bage" ]; // [aps setObject:@"def.mp3" forKey:@"sound"]; // [jsonDic setObject:aps forKey:@"aps"]; // NSString *strJson = [jsonDic JSONString]; // NSLog(@"%@",strJson); //远程测试读取java服务中返回的json //构造一个url http://192.168.0.92:8080/ly/w/route/ios_test //http://192.168.0.92:8080/ly/w/route/findRouteByCategoryId?categoryId=1 NSURL *url = [NSURL URLWithString:@"http://192.168.0.92:8080/ly/w/route/findRouteByCategoryId?categoryId=1"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request startSynchronous]; NSError *error = [request error]; if (!error) { NSString *response = [request responseString]; NSLog(@"请求的结果是;%@",response); label.text = @"succeeded"; //用[obj class]查看后发现返回的数据是JKArray NSArray *result = [response objectFromJSONString]; NSLog(@"%@",[result class]); NSLog(@"%@",[[result objectAtIndex:0] class]); for (int i = 0; i < [result count]; i++) { //取得result的每一条记录 NSDictionary *di1 = [result objectAtIndex:i]; NSString *t_id = [di1 objectForKey:@"id"]; NSString *t_name = [di1 objectForKey:@"name"]; NSLog(@"第%d条记录的id值是%@",i+1,t_id); NSLog(@"第%d条记录的name值是%@",i+1,t_name); //取得每个城市下的线路routes NSArray *routes = [di1 objectForKey:@"routes"]; //循环线路 for (NSDictionary *route in routes) { //取得每个线路下的标题 NSString *title = [route objectForKey:@"title"]; NSLog(@"%@",title); } } } }
复制代码
先用NSUrl构造一个url,然后用ASIHTTPRequest请求,如果没错误的情况下用NSString来接收返回的值
NSString *response = [request responseString];
复制代码
调用JSONKit转成NSArray
[response objectFromJSONString];
复制代码
时间就是花在这了,当时不知道这个地方到底该用什么接收,网上查都说是用NSDictionary,但是用这个就一直报错,后面听群里的网友说,可以用[obj class]来确定是什么类型,试了下,果真好使,,,,到这基本上就没什么问题了 ,哈哈。
当用[obj class]得知返回的数据是Array之后,就直接用NSArray接收就好了,后面什么都通顺了。。。
点击JSONKit远程测试,控制台输出:
相关文章推荐
- 利用ASIHTTPRequest请求java服务和JSONKit解析返回的json串
- Http请求返回json解析java.lang.IndexOutOfBoundException错误
- 利用HttpWebRequest请求url路径返回json结果对象
- Gson利用泛型将Http请求返回的Json字符串快速解析模板
- JAVA 请求http接口返回json数据解析
- C# HttpWebRequest\HttpWebResponse\WebClient发送请求解析json数据
- java发起http请求获取返回的Json对象
- ASIHTTPRequest和libxml结合,实现边请求边解析
- 关于java 发送http json数据格式请求时,服务器端如何接收json数据并解析
- Jmeter中通过beanshell脚本解析HTTP请求的返回的json并作为下个请求的输入参数
- ASIHTTPRequest和libxml结合,实现边请求边解析
- iOS代码技巧之ASIHttpRequest类库的使用及Json解析(以解析中国天气网天气预报为例)
- iPhone开发笔记(9)ASIHttpRequest和json-framework实现json解析(iOS客户端)
- 登陆请求(post),利用ASIHTTPRequest;
- ASIHTTPRequest 和 libxml 结合,实现边请求边解析
- ASIHttpRequest和json-framework实现json解析(iOS客户端)
- Android/java 利用HttpUrlConnection 发送put请求,携带json参数
- 利用java调用百度API接口,解析返回的json数据,突破百度API接口调用结果的限制
- Python发送http请求解析返回json的实例
- http请求返回并解析json数据