分析json、xml的区别?json、xml解析方式的底层是如何处理的?

区别:

(1)可读性方面:基本相同,xml的可读性比较好
(2)可扩展性方面:都具有很好的扩展性
(3)编码难度方面:相对而言:JSON的编码比较容易
(4)解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点
(5)数据体积方面:json相对于xml来讲,数据体积小,传递的速度跟快些
(6)数据交互方面:json与JavaScript的交互更加方面,更容易解析处理,更好的数据交互
(7)数据描述方面:xml对数据描述性比较好

(8)传输速度方面:json的速度远远快于xml


JSON底层原理: 遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}号,[]号, : 号 等进行区分,{}号是一个字典的开始,[]号是一个数组的开始, : 号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值可能是字典,数 组,或字符串而已。

XML底层原理: XML解析常用的解析方法有两种:DOM解析和SAX解析。DOM 采用建立树形结构的方式访问 XML 文档,而SAX 采用的事件模型 。DOM 解析把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。使用 DOM 解析器的时候需

要处理整个 XML 文档,所以对性能和内存的要求比较高。SAX在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。


延伸:SAX与DOM的区别:
1、SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到 满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。另一方面,由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。

2、DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下 导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程。

--------------------------------------------JSON解析代码实现----------------------------------------------------

//自己写得JSON解析方法

- (void)JSONParser

{

   //读取数据并解析

    NSString *path = [[NSBundle mainBundle] pathForResource:@"StudentofType:@"txt"];

    NSData *data = [NSData dataWithContentsOfFile:path];

    //参数1:要解析的数据

   //参数2:对解析的结果的选项

    //参数3:错误信息

    NSError *error = nil;

    NSArray *arr =  [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

    NSLog(@"%@", arr);

}


--------------------------------------------------------XML解析代码实现--------------------------------------------

#warning XML代码解析

-(BOOL)parser:(NSString*)string {

    //系统自带的

    NSXMLParser *par = [[[NSXMLParser alloc] initWithData:[string dataUsingEncoding:NSUTF8StringEncoding]]autorelease];

    //设置NSXMLParser对象的解析方法代理

    [par setDelegate:self];

    //par.delegate = self;

    //调用代理解析NSXMLParser对象,看解析是否成功

    return [par parse];

}

#pragma mark xmlparser 

//step 1 :准备解析

- (void)parserDidStartDocument:(NSXMLParser *)parser {

    

    NSLog(@"%@",NSStringFromSelector(_cmd) );

}

//step 2:准备解析节点

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI    qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

    

    NSLog(@"%@",NSStringFromSelector(_cmd) );

}

    

//step 3:获取首尾节点间内容

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    

    NSLog(@"%@",NSStringFromSelector(_cmd) );

}

//step 4:解析完当前节点

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI  qualifiedName:(NSString *)qName {

    

    NSLog(@"%@",NSStringFromSelector(_cmd) );

}

//step 5;解析结束

- (void)parserDidEndDocument:(NSXMLParser *)parser {

    

    NSLog(@"%@",NSStringFromSelector(_cmd) );

}

//获取cdata块数据

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock {

    

    NSLog(@"%@",NSStringFromSelector(_cmd) );

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值