源码请到Github下载:https://github.com/manguoge/MessageBoard-JSON(点星支持一下哦奋斗)
一、JSON简介
JSON是一种轻量级的在服务器、网站和APP之间发送数据的极佳的方式,相比较于XML,JSON更加轻量级、网络效率更高、带宽要求更低使用iOS对JSON的支持(如苹果官方的NSJSONSerialization、第三方的SBJSON和JSONKit),可以很轻松的在iOS项目中集成JSON。JSON语法简单直观,JSON文档可以直接包含字典对象和数组对象。
二、demo详解
本文通过一个示例APP详细介绍了如何使用JSON进行APP和服务器端的数据发送和接收,包括一个Ruby on Rails服务器和一个ios应用。这个服务器支持以JSON发送和接收数据。ios应用从服务器获取消息,并在标准表视图中显示他们,还能够像服务器发送JSON格式的消息。
(一、接收数据)
1.创建请求设置服务器URL,让应用能够向正确的地址发送请求
#define kRequestURLString @"http://freezing-cloud-6077.herokuapp.com/messages.json"
接下来创建请求和连接,发起网络请求服务器提供URL处的message.json数据,如果成功建立连接,调用代理方法,将返回的数据保存在本地。
//请求
NSURL* requestURL=[NSURL URLWithString:kRequestURLString];
NSURLRequest* request=[[NSURLRequest alloc] initWithURL:requestURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.];
//连接
NSURLConnection* theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
if (theConnection)
{
connectData=[[NSMutableData alloc] init];
NSLog(@"the Connection is scuess:%@",theConnection);
}
else
{
NSLog(@"Connection Failed!");
self.activityView.hidden=YES;
[self.activityIndicator stopAnimating];
}
}
2.实现连接的代理方法,获取数据,查看数据
#pragma -mark NSURLConnectionDelegate,NSURLConnectionDataDelegate
//当服务器响应时激发该方法
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[connectData setLength:0];
}
//每次读取服务器数据时激发该方法,对于一个请求而言,服务器数据可能要分几次才能读完,一次该方法一般会被调用多次,所以建议使用NSMutableData来手机数据,然后可以整体转换为字符串对象。
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[connectData appendData:data];
}
//当连接服务器发送错误时激发该方法,通过error获取错误信息
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}
//当上传或者下载数据完成时激发该方法,之后激发一次
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString* responseStr=[NSString stringWithUTF8String:[connectData bytes]];
NSLog(@"responseStr:%@",responseStr);
NSError* error=nil;
NSArray* jsonArray=[NSJSONSerialization JSONObjectWithData:connectData options:0 error:&error];
if (!error)
{
messageArray=jsonArray;
NSLog(@"messageArray:%@",messageArray);
[self.MessageTableView reloadData];
}
else
{
NSLog(@"parsing error:%@",error);
}
[self.activityView setHidden:YES];
[self.activityIndicator stopAnimating];
}
3.显示数据在表UITableView上。
(二、发送数据)
将输入的数据通过NSJSONSerialization转换为JSON数据发送到服务器。
1.构建要发送的数据
//构建发送的数据
NSMutableDictionary* messageDict=[[NSMutableDictionary alloc] initWithCapacity:1];
[messageDict setObject:inputName forKey:@"name"];
[messageDict setObject:inputMessage forKey:@"message"];
[messageDict setObject:[dateFormatter stringFromDate:date] forKey:@"message_date"];
NSDictionary* postDict=[NSDictionary dictionaryWithObject:messageDict forKey:@"message"];
//将数据转换为JSON格式
NSError* JSONSerialerror=nil;
NSData* jsonData=[NSJSONSerialization dataWithJSONObject:postDict options:NSJSONWritingPrettyPrinted error:&JSONSerialerror];
2.为向服务器发送数据,首先使用NSMutableURLRequest请求(相比于NSURLRequest的好处是可以添加请求头和请求参数)。
//创建请求
NSURL* messageURL=[NSURL URLWithString:kRequestURLString];
NSMutableURLRequest* request=[NSMutableURLRequest requestWithURL:messageURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.];
//请求方式是发送
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accect"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"&d",[jsonData length]] forHTTPHeaderField:@"Content-Length"];
//将要发送的数据添加到请求头
[request setHTTPBody:jsonData];
//根据请求创建连接
NSURLConnection* sendConnecttion=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
至此,成功。
源代码请到Github下载:https://github.com/manguoge/MessageBoard-JSON(点星支持一下哦奋斗)