iOS学习之数据解析
.将通过网络请求或者本地路径获取到的数据存储为NSData对象.
.创建解析工具
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
.设置代理
xmlParser.delegate = self;
.开始解析
[xmlParser parse];
[xmlParser release]; #pragma mark - delegate //当读取到标签后的内容时触发
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSLog(@"读取到内容%@", string);
//用属性str存储读取到的标签内容;
_str = string;
}
//当读取到开始标签时触发
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
NSLog(@"开始标签");
if ([elementName isEqualToString:@"Student"]) {
//当读取到开始标签时,创建Student对象.
self.stu = [[[StudentModel alloc] init] autorelease];
//attributeDict 存储节点的属性值
self.stu.position = attributeDict[@"position"];
} }
//当读取到结束标签时触发</Student>
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSLog(@"结束标签");
if ([elementName isEqualToString:@"name"]) {
self.stu.name = self.str;
} else if ([elementName isEqualToString:@"gender"]) {
self.stu.gender = self.str;
} else if ([elementName isEqualToString:@"age"]) {
self.stu.age = self.str;
} else if ([elementName isEqualToString:@"motto"]) {
self.stu.motto = self.str;
} else if ([elementName isEqualToString:@"Student"]) {
//读取到Student结束标签时,将Student对象存储到数组中
[self.dataSource addObject:_stu];
}
} //当解析完毕时触发
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"解析完毕");
//当解析完毕时,让tableView重新刷新一下数据
[self.tableView reloadData];
}
//系统提供的解析JSON方法
- (void)handleSystemParser:(UIBarButtonItem *)item {
//1.获取文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"];
//2.根据文件路径初始化NSData对象
NSData *data = [NSData dataWithContentsOfFile:filePath];
//解析
NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@", arr); }
//第三方类库解析JSON方法(这里使用JSONKit)
- (void)handleThirdPartParser:(UIBarButtonItem *)item { //将Json格式数据转化为OC对象(NSString对象) //1.获取文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"]; //2.根据文件路径初始化字符串对象
NSString *dataStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
//3.解析成OC对象.(可变对象/不可变对象)
NSArray *arr1 = [dataStr objectFromJSONString];
NSArray *arr2 = [dataStr mutableObjectFromJSONString];
NSLog(@"%@",arr1);
NSLog(@"%@", arr2); }
选择了解---
当然,也可以解析成NSData对象,第一步的方法都一样,获取文件路径
- (void)handleThirdPartParser:(UIBarButtonItem *)item {
    //将Json格式数据转化为OC对象(NSData对象)
    //1.获取文件路径
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"];
     //根据文件路径初始化成NSData对象
     NSData *data = [NSData dataWithContentsOfFile:filePath];
     //解析.(可变/不可变)
     NSArray *arr1 = [data objectFromJSONData];
     NSMutableData *arr2 = [data mutableObjectFromJSONData];
以上是将JSON数据转为OC的对象,下面是讲OC对象转为JSON数据的方法.
    //将OC对象转成JSON格式数据.
    //1.将OC的数组对象转成JSON格式数据.
    NSArray *arr1 = @[@"aa",@"bb",@"cc",@"dd"];
    NSData *jsonData1 = [arr1 JSONData];//转成JSON格式Data
    NSString *jsonStr1 = [arr1 JSONString]; //转成JSON格式String
    //2.将OC的字典对象转成JSON格式数据.
    NSDictionary *dic2 = @{@"name":@"Frank",
                           @"age":@""
                           };
    NSData *jsonData2 = [dic2 JSONData];//转成JSON格式Data
    NSString *jsonStr2 = [dic2 JSONString];//转成JSON格式String
iOS学习之数据解析的更多相关文章
- iOS学习——JSON数据解析(十一)
		
在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...
 - iOS学习—JSON数据解析
		
关于在iOS平台上进行JSON解析,已经有很多第三方的开源项目,比如TouchJson,JSONKit,SBJon等,自从iOS5.0以后,苹果SDK推出了自带的JSON解决方案NSJSONSer ...
 - iOS学习之数据请求
		
GET请求----同步连接 //GET请求 同步连接 - (void)handleSynchronize:(UIBarButtonItem *)item { //GET请求 //1.创建网址字符串; ...
 - 【iOS】Plist-XML-JSON数据解析
		
网络上数据传输通用的有XML.JSON等,iOS中也能够用Plist. 要进行传输数据.就要首先进行序列化: 1.序列化. 对象转换成二进制流.(这个一句话即可) .反序列化. 二进制流转换为对象等 ...
 - iOS学习笔记--数据存储
		
iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 1. XM ...
 - iOS 学习 - 22  异步解析 JSON,使用 FMDB 存储,TableView 显示
		
前提是已经知道了有哪些 key 值 Model 类: .h @interface ListModel : NSObject @property (nonatomic, copy)NSString *t ...
 - ios网络_json数据解析
		
网络上数据传输以json或者xml格式. json是字典 或者 数组 或者字典跟数组嵌套的形式.解析json就是把json反序列化(解析)---把json转换为oc对象.json序列化就是把oc对象转 ...
 - iOS学习之数据持久化详解
		
前言 持久存储是一种非易失性存储,在重启设备时也不会丢失数据.Cocoa框架提供了几种数据持久化机制: 1)属性列表: 2)对象归档: 3)iOS的嵌入式关系数据库SQLite3: 4)Core Da ...
 - 【原】iOS学习之UIStoryboardSegue解析
		
在 Storyboard 的可视化编程中,跳转界面就是按住 Ctrl 使用鼠标头一条连线就可以解决,相当的简单!本篇博客主要就是介绍这条连线,在iOS中,这条连线也是一个对象,也有其自己的初始化方法和 ...
 
随机推荐
- 转:socket通信简介
			
转:http://blog.csdn.net/xiaoweige207/article/details/6211577/ 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页 ...
 - API认证方法一览
			
Open api authentication Amazon DigitalOcean Webchat Weibo QQ Amazon Web Services HMAC Hash Message A ...
 - PL/SQL 包头和包体
			
包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量 变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令. 实例如下: CREAT ...
 - 【HDOJ】1057 A New Growth Industry
			
纯粹的模拟题目. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 20 # ...
 - BZOJ3392: [Usaco2005 Feb]Part Acquisition 交易
			
3392: [Usaco2005 Feb]Part Acquisition 交易 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 26 Solved: ...
 - 自写 jQuery 大幅弹窗广告插件(不喜勿拍)
			
最近写了做的两个项目都要做几乎同一件事,在首页弹出一个广告.本来是想在网上找一个的,找了几个,花了时间但都不怎么满意,尼玛呀,坑爹呀…… 最后一想,干脆自己动手了. 第一次写,在网上找一些例子来看. ...
 - HDOJ 1393 Weird Clock(明白题意就简单了)
			
Problem Description A weird clock marked from 0 to 59 has only a minute hand. It won't move until a ...
 - HDOJ 1070 Milk(水题,考英文的)
			
Problem Description Ignatius drinks milk everyday, now he is in the supermarket and he wants to choo ...
 - C++中的四种转型操作符
			
在具体介绍C++中的四种转型操作符之前,我们先来说说旧式转型的缺点: ①它差点儿同意将不论什么类型转换为不论什么其它类型,这是十分拙劣的.假设每次转型都可以更精确地指明意图,则更好. ②旧式转型难以辨 ...
 - 我的创业劲儿,无可阻挡-JAVA学院张孝伟
			
导语:张孝伟,这个怀揣着创业梦想的农村小伙,为了报答父母的恩情,他开启了自己的逐梦之旅.友好的伙伴,火旺的生意.以前让他如鱼得水.就在他满足于现状的时候,一场突如其来的事故,让他一夜间倾家荡产.他是否 ...