Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
来源:互联网 发布:mac移动硬盘装win10 编辑:程序博客网 时间:2024/06/01 23:04
[置顶] Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
json和xml的普及个人觉得是为了简化阅读难度,以及减轻网络负荷,json和xml 数据格式在格式化以后都是一种树状结构,可以树藤摸瓜的得到你想要的任何果子。
而不格式化的时候json和xml 又是一个普普通通的字符串,在网络通信的时候也只需要请求一次,而不用每次为得到木一个值而重复的请求服务器或者目标主机,
json和xml 都采用 键 - 值 的形式来存放数据。
xml 使用: <键> 值 </键>
json 使用: "键" : "值"
苹果公司提供了一个官方的json解析库 NSJSONSerialization
NSJSONSerialization 里面包含了两个方法来通过不同数据形式来解析json数据。
1、+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error; //使用缓冲区数据来解析
2、+ (id)JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError **)error; // 使用文件流的形式来解析json
解析json的步骤大概是,先把json字符串读取到缓冲区,然后使用NSJSONSerialization 里面的方法进行解析,根据不同json 格式可能返回的数据类型不一样,所以最好用 id 类型接。
eg: id dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
在得到解析后的数据时,然后就一步一步 ,一个一个 键 - 值 的去寻找你想要的咚咚。
Eg 1 : 从本地文件中读取json数据,然后读取到缓冲区。
- (void)jsonParse{ //初始化文件路径。 NSString* path = [[NSBundle mainBundle] pathForResource:@"nanjing" ofType:@"txt"]; //将文件内容读取到字符串中,注意编码NSUTF8StringEncoding 防止乱码, NSString* jsonString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; //将字符串写到缓冲区。 NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; //解析json数据,使用系统方法 JSONObjectWithData: options: error: NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil]; //接下来一步一步解析。知道得到你想要的东西。 NSArray* arrayResult =[dic objectForKey:@"results"]; NSDictionary* resultDic = [arrayResult objectAtIndex:0]; NSDictionary* geometryDic = [resultDic objectForKey:@"geometry"]; NSLog(@"geometryDic: %@, resultDic:%@",geometryDic,resultDic); NSDictionary* locationDic = [geometryDic objectForKey:@"location"]; NSNumber* lat = [locationDic objectForKey:@"lat"]; NSNumber* lng = [locationDic objectForKey:@"lng"]; NSLog(@"lat = %@, lng = %@",lat,lng); [jsonString release]; }
Eg 2 :使用网络路径来解析json,
- (void)jsonParse{ //初始化网络路径。 NSString* path = @"http://maps.googleapis.com/maps/api/geocode/json?address=nanjing&sensor=true"; //初始化 url NSURL* url = [NSURL URLWithString:path]; //将文件内容读取到字符串中,注意编码NSUTF8StringEncoding 防止乱码, NSString* jsonString = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; //将字符串写到缓冲区。 NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; //解析json数据,使用系统方法 JSONObjectWithData: options: error: NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil]; //一下为自定义解析, 自己想怎么干就怎么干 NSArray* arrayResult =[dic objectForKey:@"results"]; NSDictionary* resultDic = [arrayResult objectAtIndex:0]; NSDictionary* geometryDic = [resultDic objectForKey:@"geometry"]; NSLog(@"geometryDic: %@, resultDic:%@",geometryDic,resultDic); NSDictionary* locationDic = [geometryDic objectForKey:@"location"]; NSNumber* lat = [locationDic objectForKey:@"lat"]; NSNumber* lng = [locationDic objectForKey:@"lng"]; NSLog(@"lat = %@, lng = %@",lat,lng); [jsonString release]; }
Eg 3 :使用网络路径来解析json 。 使用NSURLRequest 和NSURLConnection 请求网络数据。
- (void)jsonParse{ //初始化网络路径。 NSString* path = @"http://maps.googleapis.com/maps/api/geocode/json?address=nanjing&sensor=true"; //初始化 url NSURL* url = [NSURL URLWithString:path]; NSURLRequest* request = [NSURLRequest requestWithURL:url]; //将请求到的字符串写到缓冲区。 NSData* jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; //解析json数据,使用系统方法 JSONObjectWithData: options: error: NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil]; //一下为自定义解析, 自己想怎么干就怎么干 NSArray* arrayResult =[dic objectForKey:@"results"]; NSDictionary* resultDic = [arrayResult objectAtIndex:0]; NSDictionary* geometryDic = [resultDic objectForKey:@"geometry"]; NSLog(@"geometryDic: %@, resultDic:%@",geometryDic,resultDic); NSDictionary* locationDic = [geometryDic objectForKey:@"location"]; NSNumber* lat = [locationDic objectForKey:@"lat"]; NSNumber* lng = [locationDic objectForKey:@"lng"]; NSLog(@"lat = %@, lng = %@",lat,lng); }
demo下载 :http://download.csdn.net/download/wsq724439564/6207829
- Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- iOS开发 JSON解析 NSJSONSerialization
- iphone下json的解析 NSJSONSerialization
- IOS JSON解析 NSJSONSerialization
- 苹果自带的json解析NSJSONSerialization(序列化)
- iOS开发1-使用NSJSONSerialization解析JSON数据
- ios-使用NSJSONSerialization解析JSON文件
- iOS 使用NSJSONSerialization类进行json解析
- iOS --- 使用NSJSONSerialization来解析JSON格式的数据
- ios中使用 NSJSONSerialization对 json数据的解析
- Objective-C-使用NSMutableURLRequest发送POST请求,使用NSJSONSerialization解析JSON字符串
- 【iOS开发之Objective-C】Json的解析
- android mediaEffect musicFx
- Window Dos命令之SET命令
- mongodb常用命令脚本化-自动化运维
- struts2技术解析
- Java&&深入理解ClassLoader
- Objective-C ,ios,iphone开发基础:JSON解析(使用苹果官方提供的JSON库:NSJSONSerialization)
- 手动释放归档空间解决ORA-00257错误
- ubuntu software center卸载软件出现如下错误
- VS2012中js获取服务器控件的值
- CentOS下pip和shadowsocks的安装使用
- 图片音视频应用开发的工具与服务大礼包
- 怎样判断MySQL是否支持分区?
- epoll+反应堆模式
- Android最佳性能实践(二)——分析内存的使用情况