(转)解析json xml
JSON数据
- {"videos":[{"id":1,"image":"resources/images/minion_01.png","length":10,"name":"小黄人 第01部","url":"resources/videos/minion_01.mp4"},{"id":2,"image":"resources/images/minion_02.png","length":12,"name":"小黄人 第02部","url":"resources/videos/minion_02.mp4"},{"id":3,"image":"resources/images/minion_03.png","length":14,"name":"小黄人 第03部","url":"resources/videos/minion_03.mp4"},{"id":4,"image":"resources/images/minion_04.png","length":16,"name":"小黄人 第04部","url":"resources/videos/minion_04.mp4"},{"id":5,"image":"resources/images/minion_05.png","length":18,"name":"小黄人 第05部","url":"resources/videos/minion_05.mp4"},{"id":6,"image":"resources/images/minion_06.png","length":20,"name":"小黄人 第06部","url":"resources/videos/minion_06.mp4"},{"id":7,"image":"resources/images/minion_07.png","length":22,"name":"小黄人 第07部","url":"resources/videos/minion_07.mp4"},{"id":8,"image":"resources/images/minion_08.png","length":24,"name":"小黄人 第08部","url":"resources/videos/minion_08.mp4"},{"id":9,"image":"resources/images/minion_09.png","length":26,"name":"小黄人 第09部","url":"resources/videos/minion_09.mp4"},{"id":10,"image":"resources/images/minion_10.png","length":28,"name":"小黄人 第10部","url":"resources/videos/minion_10.mp4"},{"id":11,"image":"resources/images/minion_11.png","length":30,"name":"小黄人 第11部","url":"resources/videos/minion_11.mp4"},{"id":12,"image":"resources/images/minion_12.png","length":32,"name":"小黄人 第12部","url":"resources/videos/minion_12.mp4"},{"id":13,"image":"resources/images/minion_13.png","length":34,"name":"小黄人 第13部","url":"resources/videos/minion_13.mp4"},{"id":14,"image":"resources/images/minion_14.png","length":36,"name":"小黄人 第14部","url":"resources/videos/minion_14.mp4"},{"id":15,"image":"resources/images/minion_15.png","length":38,"name":"小黄人 第15部","url":"resources/videos/minion_15.mp4"},{"id":16,"image":"resources/images/minion_16.png","length":40,"name":"小黄人 第16部","url":"resources/videos/minion_16.mp4"}]}
JSON–OC 转换对照表
JSON |
OC |
大括号 { } |
NSDictionary |
中括号 [ ] |
NSArray |
双引号 "" |
NSString |
数字 10、10.8 |
NSNumber |
1.苹果原生
+ (id)JSONObjectWithData:(NSData*)data options:(NSJSONReadingOptions)opterror:(NSError**)error;
- // data 是获取到的json数据
- - (NSArray *)parseJSONData:(NSData *)data
- {
- // 解析数据 (使用NSJSONSerialization 系统原生json解析类)
- NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
- NSArray *array = dict[@"videos"];
- NSMutableArray *videos = [NSMutableArray array];
- for (NSDictionary *videoDict in array) {
- HMVideo *video = [HMVideo videoWithDict:videoDict];
- [videos addObject:video];
- }
- return videos;
- }
+ (NSData *)dataWithJSONObject:(id)objoptions:(NSJSONWritingOptions)opterror:(NSError**)error;
XML(ExtensibleMarkupLanguage,译作“可扩展标记语言”)
- <videos>
- <video name="小黄人 第01部" length="30" />
- <video name="小黄人 第02部" length="19" />
- <video name="小黄人 第03部" length="33" />
- </videos>
1.DOM (GDataXML 苹果自带)方式解析
一次性将整个XML文档加载进内存,比较适合解析小文件
GDataXML配置
GDataXML使用
例如:
- // data 是获取到的xml数据
- - (NSArray *)DOMparseXMLWithData:(NSData *)data
- {
- // 1.加载文档
- GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
- // 2.获得根元素
- GDataXMLElement *root = doc.rootElement;
- // 3.获得所有video元素
- NSArray *elements = [root elementsForName:@"video"];
- // 4.将GDataXMLElement对象转成HMVideo模型
- NSMutableArray *videos = [NSMutableArray array];
- for (GDataXMLElement *ele in elements) {
- HMVideo *video = [[HMVideo alloc] init];
- video.ID = [ele attributeForName:@"id"].stringValue.intValue;
- video.length = [ele attributeForName:@"length"].stringValue.intValue;
- video.name = [ele attributeForName:@"name"].stringValue;
- video.image = [ele attributeForName:@"image"].stringValue;
- video.url = [ele attributeForName:@"url"].stringValue;
- [videos addObject:video];
- }
- return videos;
- }
2.SAX(NSXMLParser 苹果自带 需要使用代理
<NSXMLParserDelegate>
从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件
- // data 是获取到的xml数据
- - (NSArray *)SAXparseXMLWithData:(NSData *)data
- {
- // 1.创建解析器
- NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
- // 2.设置代理
- parser.delegate = self;
- // 3.开始解析
- [parser parse]; // 卡住(解析完毕才会返回)
- return self.videos;
- }
- #pragma mark - NSXMLParserDelegate
- /**
- * 开始解析文档时调用
- */
- - (void)parserDidStartDocument:(NSXMLParser *)parser
- {
- // NSLog(@"parserDidStartDocument----");
- }
- /**
- * 结束解析文档时调用(解析完毕)
- */
- - (void)parserDidEndDocument:(NSXMLParser *)parser
- {
- // NSLog(@"parserDidEndDocument----");
- }
- /**
- * 解析到一个元素的开头时调用 <videos>
- */
- - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
- {
- // NSLog(@"didStartElement----%@", elementName);
- if ([@"videos" isEqualToString:elementName]) { // 解析到一个videos标签
- self.videos = [NSMutableArray array];
- } else if ([@"video" isEqualToString:elementName]) { // 解析到一个video标签, 创建一个模型
- HMVideo *video = [HMVideo videoWithDict:attributeDict];
- [self.videos addObject:video];
- }
- }
- /**
- * 解析到一个元素的结尾时调用 </videos>
- */
- - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
- {
- // NSLog(@"didEndElement----%@", elementName);
- }
(转)解析json xml的更多相关文章
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- 数据解析(XML和JSON数据结构)
一 解析 二 XML数据结构 三 JSON 数据结构 一 解析 1 定义: 从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...
- ios之json,xml解析
JSON解析步骤: 1.获取json文件路径 NSString*path = [[NSBundle mainBundle] pathForResource:@"Teacher"of ...
- iOS网络-02-数据解析(JSON与XML)
数据交互格式 服务器返回给用户的数据,通常是以下两种方式: JSON XML JSON 一种轻量级的数据数据格式,体积比XML小,是服务器返回给移动端通常采用的格式 用使用JSON文件中的数据,需要对 ...
- [转]解析json:与array,list,map,bean,xml相互转化
一.解析json之net.sf.json 下载地址 使用netsfjson需要导入的包 JSONObject JSONArray JavaBean与json字符串互转 List与json字符串互转 M ...
- JSON解析和XML解析
一. XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架 经常用到的方法: 1.- (id)initWithXMLString:(NSStrin ...
- 在.NET2.0中解析Json和Xml
在.NET解析json有很多方法,这里介绍最简单也用的最多的一种. 一.添加引用 解析Json,先下载开源控件 Newtonsoft.Json.dll 下载地址:http://files.cnblog ...
- ios 解析json,xml
一.发送用户名和密码给服务器(走HTTP协议) // 创建一个URL : 请求路径 NSString *urlStr = [NSString stringWithFormat:@"ht ...
- UI进阶 解析XML 解析JSON
1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSO ...
随机推荐
- 【17.12.22.B】
B 题面描述: 给一个长度为n的序列,a[1], a[2], ... , a[n], 选出连续的k个数,使得这k个数的最大值加这k个数的or值最大. 假设选出的数为a[l], a[l + 1], .. ...
- [SDOI2010]星际竞速——费用流
类似于最短路的网络流,而且还要保证每个点经过一次,拆点就比较方便了. 连边怎么连?要保证最大流是n(每个点经过一次)还要能从直接跳转 将每个点拆点.源点向每个点的入点连一条容量为1费用为0的边.源点向 ...
- poj 1201 TYVJ 1415 Intervals
Description: 给定n个闭区间[ai,bi] 和n个整数ci,你需要构造一个集合Z,使得对于任何的i∈[1,n],Z中满足x∈[ai,bi]的x不少于ci个 求这样的整数集合Z至少包含多少个 ...
- Membership Service Providers (MSP)
https://blog.csdn.net/baidu_39649815/article/details/76468249 Membership service provider (MSP)是一个提供 ...
- Javascript 的addEventListener()及attachEvent()区别分析
大家都知道事件的用法就是当某个事件(状况)被触发了之后就会去执行某个Function, 尤其是Javascript, 在当红AJAX的催化下, 了解Javascript的Event用法更加重要, 在这 ...
- 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...
- ZigBee MAC层(下)
6. MAC功能描述 6.1 信道访问 802.15.4使用的物理无线电信道的访问机制有下面两种: - 基于竞争的访问机制: 设备使用CSMA-CA退避算法以分布式方式访问信道 - 无竞争的访问机制: ...
- 如何在 Linux 上锁定虚拟控制台会话
当你在共享的系统上工作时,你可能不希望其他用户偷窥你的控制台中看你在做什么.如果是这样,我知道有个简单的技巧来锁定自己的会话,同时仍然允许其他用户在其他虚拟控制台上使用该系统.要感谢 Vlock(Vi ...
- 关于EINTR错误的理解【转】
转自:http://www.xuebuyuan.com/1470645.html 最近在工作中遇到了EINTR错误,感到比较困惑,几番研究之后,颇有心得和收获,特记录如下,便于以后查询,也给有同样困惑 ...
- kthread_create与kernel_thread的区别【栈】
转自:http://blog.chinaunix.net/uid-25513153-id-2888903.html kthread_create与kernel_thread的区别 kernel thr ...