JSON XML 数据解析

作为客户端,一般从后台传入的数据主要是两种 ,一种是JSON数据 一种是XML格式的数据  对于这两种数据  咱们都要一套自己的解析方法

JSON:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。 JSON 是出自于 JavaScript ,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象

常见的两种格式:

1. 这种对应着iOS中的键值对
{
    "length" : "1",
    "url" : "http:\/\/127.0.0.1\/resources\/1",
    "image" : "http:\/\/127.0.0.1\/resources\/images\/_01.png",
    "ID" : "01",
    "name" : "第一"
},
{
    "length" : "2",
    "url" : "http:\/\/127.0.0.1\/resources\/2",
    "image" : "http:\/\/127.0.0.1\/resources\/images\/_02.png",
    "ID" : "02",
    "name" : "第2"
}

2.这种对应着数组
[
{
    "length" : "1",
    "url" : "http:\/\/127.0.0.1\/resources\/1",
    "image" : "http:\/\/127.0.0.1\/resources\/images\/_01.png",
    "ID" : "01",
    "name" : "第一"
},
{
    "length" : "2",
    "url" : "http:\/\/127.0.0.1\/resources\/2",
    "image" : "http:\/\/127.0.0.1\/resources\/images\/_02.png",
    "ID" : "02",
    "name" : "第2"
}
]

解析:

1把JSON数据转换到OC能识别的数据 序列化
  id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL] ;  

2.将OC数据转换成JSON数据  反序列化
 NSData *data =[NSJSONSerialization dataWithJSONObject:arrM options:0 error:NULL];

XML:

XML(Extensible Markup Language ),可扩展标记语言,是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立

常见的两种格式:

1.  只有元素 和属性 没有元素内容的
<?xml version="1.0" encoding="UTF-8"?>
<citys>
    <city ID = "01" name = "北京 " length = "2" image = "http://127.0.0.1/resources/images/01.png" url = "http://127.0.0.1/resources/videos/01.mp4" />
</citys>

2.元素 和元素内容  没有元素属性
<citys>
    <ciyt>
        <ID>01</ID>
        <image>http://127.0.0.1/resources/images/01.png</image>
        <length>2</length>
        <name>北京</name>
        <url>http://127.0.0.1/resources/videos/01.mp4</url>
    </city>
</citys>

解析:

上述第一种解析方式:(控制器中:)

  // 创建XML解析器
        NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];

        // 设置代理  遵守协议

        parser.delegate = self;
        //开始解析/同步解析

        [parser parse];

// 实现代理方法
#pragma mark - XML解析器的代理方法
// 开始解析文档时去调用
- (void)parserDidStartDocument:(NSXMLParser *)parser{
    NSLog(@"开始解析文档");
}

// 开始解析元素的时候调用,attributes存储着元素的属性
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
    NSLog(@"开始解析元素%@,元素属性:%@",elementName,attributeDict);
    if ([elementName isEqualToString:@"city"]) {

        BFModel *model = [BFModel modelWithDict:attributeDict];
        [self.videosArrM addObject:model];
    }
}

// 发现元素内容的时候去调用
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    NSLog(@"元素内容:%@",string);

}

// 元素解析后调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    NSLog(@"%@元素解析完成",elementName);
}

// 文档解析结束后调用
- (void)parserDidEndDocument:(NSXMLParser *)parser{
    NSLog(@"文档解析完成");
}

*****************************************************************

上述第二种解析方式:

// 定义两个全局变量

@interface ViewController ()<NSXMLParserDelegate>

@property (nonatomic,strong)NSMutableArray *videosArrM;

@property (nonatomic,strong)BFModel *model;

// 对应的当前的字符串的内容
@property (nonatomic,strong)NSMutableString *curretStrM;

@end

 // 创建XML解析器
        NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];

        // 设置代理  遵守协议

        parser.delegate = self;
        //开始解析/同步解析

        [parser parse];

// 开始解析文档时去调用
- (void)parserDidStartDocument:(NSXMLParser *)parser{
    NSLog(@"开始解析文档");
}

// 开始解析元素的时候调用,attributes存储着元素的属性
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
    NSLog(@"开始解析元素%@,元素属性:%@",elementName,attributeDict);
    if ([elementName isEqualToString:@"city"]) {

        self.model = [[BFModel alloc]init];
        [self.videosArrM addObject:self.model];
    }

}

// 发现元素的时候去调用
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    NSLog(@"发现元素内容:%@",string);
    // 将字符串的内容替换
    [self.curretStrM setString:string];
}

// 元素解析后调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    NSLog(@"%@元素解析完成",elementName);
    if ([elementName isEqualToString:@"ID"]) {
        [self.model setValue:self.curretStrM forKey:elementName];
    }else if ([elementName isEqualToString:@"image"]){
        [self.model setValue:self.curretStrM forKey:elementName];
    }else if ([elementName isEqualToString:@"length"]){
        [self.model setValue:self.curretStrM forKey:elementName];
    }else if ([elementName isEqualToString:@"url"]){
        [self.model setValue:self.curretStrM forKey:elementName];
    }else if ([elementName isEqualToString:@"name"]){
        [self.model setValue:self.curretStrM forKey:elementName];
    }
}

// 文档解析结束后调用
- (void)parserDidEndDocument:(NSXMLParser *)parser{
    NSLog(@"文档解析完成");
}
时间: 2024-10-26 23:19:50

JSON XML 数据解析的相关文章

iOS开发——网络Swift篇&amp;JSON与XML数据解析

JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SDK自带的JSON解决方案NSJSONSerialization,这是一个非常好用的JSON生成和解析工具,效率也比其他第三方开源项目高. NSJSONSerialization能将JSON转换成Foundation对象,也能将Foundation对象转换成JSON,但转换成JSON的对象必须具有如下属性

NSURLSession(Get &amp; Post,JSON、XML数据解析,文件上传下载)

NSURLSession(Get & Post,JSON.XML数据解析,文件上传下载) 一.NSURLSession概述 NSURLSession是iOS7中新的网络接口,支持后台网络操作,除非用户强行关闭. NSURLSession使用步骤: 1. 新建NSURLSessionConfiguration,用于NSURLSession的配置 2. 新建NSURLSession 3. 新建NSURLSessionTask对象 4. 执行task 其中NSURLSessionConfigurati

零基础iOS之Json及XML数据解析2

零基础iOS之Json及XML数据解析http://www.cnblogs.com/dingjianjaja/articles/4798604.html

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文

xml数据解析调研

XML数据解析http://www.tuicool.com/articles/Nraau2(必用) http://www.cnblogs.com/pengyingh/articles/2342699.html(html解析) 是基于Xml点对点的即时通讯 XAMPP 打不开方法(sudo apachectl stop) 环信 融云 -->> XMPPss

Java反射机制实现微信公众平台XML数据解析

在做微信公众平台开发时,接收消息中有很多种类型的xml消息,比如"文本消息""图片消息""语音消息""视频消息""链接消息""地理位置消息"等等,最初在开发时针对每一种数据格式写了一个实体类,单独做解析,当然这样写的好处是层次分明.但经过尝试之后,用一个统一的实体类消息做处理,更加高效,当然,里面最核心的就是在遍历xml数据时,通过反射的机制动态调用set方法: 1.ReceiveXml

iOS开发网络篇之Web Service和XML数据解析

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源代码传送:http://dwz.cn/Nret1 在iPhone和后台系统的通信中,使用Web Service获取server数据上最常见的一

iOS开发:xmpp下的xml数据解析及修改上传

一.利用xmpp里的扩展文件进行xml数据解析,xml数据解析的框架需要自己手动写出. 包含这个头文件NSXMLElement+XMPP.m.主要使用了这个文件中的如下方法: - (NSXMLElement *)elementForName:(NSString *)name { NSArray *elements = [self elementsForName:name]; if ([elements count] > 0) { return [elements objectAtIndex:0]

iOS-数据持久化基础-JSON与XML数据解析

解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.XML数据结构 解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 XML数据结构 XML解析SAX?方式解析从上往下,?一点?一点读取性能好苹果推荐使?用DO