JSON&XML解析
JSON
使用JSONKit 需要添加-fno-objc-arc 是mrc的 修改之后 进行isa 替换 就能编译通过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <code-pre class = "code-pre" id = "pre-bJACDi" ><code-line class = "line-numbers-rows" ></code-line>- ( void )viewDidLoad { <code-line class = "line-numbers-rows" ></code-line> [ super viewDidLoad]; <code-line class = "line-numbers-rows" ></code-line> NSString *path = [ NSString stringWithFormat:@ "/Users/wyc/Desktop/jsontext.date" ]; <code-line class = "line-numbers-rows" ></code-line> NSData *data = [ NSData dataWithContentsOfFile:path]; <code-line class = "line-numbers-rows" ></code-line> NSURL *url = [ NSURL URLWithString:@ "file:///Users/wyc/Desktop/jsontext.date" ]; <code-line class = "line-numbers-rows" ></code-line> NSURLRequest *request = [ NSURLRequest requestWithURL:url]; <code-line class = "line-numbers-rows" ></code-line> <code-line class = "line-numbers-rows" ></code-line> [ NSURLConnection sendAsynchronousRequest:request queue:[ NSOperationQueue mainQueue] completionHandler:^( NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { <code-line class = "line-numbers-rows" ></code-line> id result = [[JSONDecoder decoder]objectWithData:data]; <code-line class = "line-numbers-rows" ></code-line> NSDictionary *dic = [result objectForKey:@ "people" ]; <code-line class = "line-numbers-rows" ></code-line> for ( id item in dic) { <code-line class = "line-numbers-rows" ></code-line> NSLog (@ "%@" ,item[@ "email" ]); <code-line class = "line-numbers-rows" ></code-line> NSLog (@ "%@" ,item[@ "firstName" ]); <code-line class = "line-numbers-rows" ></code-line> NSLog (@ "%@" ,item[@ "lastName" ]); <code-line class = "line-numbers-rows" ></code-line> } <code-line class = "line-numbers-rows" ></code-line> }]; <code-line class = "line-numbers-rows" ></code-line>} </code-pre> |
XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | <code-pre class = "code-pre" id = "pre-xeCSFp" ><code-line class = "line-numbers-rows" ></code-line> @interface Book : NSObject <code-line class = "line-numbers-rows" ></code-line> @property ( nonatomic , assign) NSInteger idd; <code-line class = "line-numbers-rows" ></code-line> @property ( nonatomic , copy ) NSString *title; <code-line class = "line-numbers-rows" ></code-line> @property ( nonatomic , copy ) NSString *author; <code-line class = "line-numbers-rows" ></code-line> @property ( nonatomic , copy ) NSString *summary; <code-line class = "line-numbers-rows" ></code-line> @end <code-line class = "line-numbers-rows" ></code-line> <code-line class = "line-numbers-rows" ></code-line>#import "Book.h" <code-line class = "line-numbers-rows" ></code-line> @interface ViewController ()< NSXMLParserDelegate > <code-line class = "line-numbers-rows" ></code-line> //目标数组 <code-line class = "line-numbers-rows" ></code-line> @property ( nonatomic , strong) NSMutableArray *Books; <code-line class = "line-numbers-rows" ></code-line> //当前正在解析的对象 <code-line class = "line-numbers-rows" ></code-line> @property ( nonatomic , strong) Book *currentBook; <code-line class = "line-numbers-rows" ></code-line> //拼接字符串 <code-line class = "line-numbers-rows" ></code-line> @property ( nonatomic , strong) NSMutableString *elementString; <code-line class = "line-numbers-rows" ></code-line> @end <code-line class = "line-numbers-rows" ></code-line> <code-line class = "line-numbers-rows" ></code-line>- ( void )viewDidLoad { <code-line class = "line-numbers-rows" ></code-line> [ super viewDidLoad]; <code-line class = "line-numbers-rows" ></code-line> [ self loadXML]; <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line>-( void )loadXML <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> NSURL *url = [ NSURL URLWithString:@ "file:///Users/wyc/Desktop/aaa.xml" ]; <code-line class = "line-numbers-rows" ></code-line> NSURLRequest *request = [ NSURLRequest requestWithURL:url]; <code-line class = "line-numbers-rows" ></code-line> <code-line class = "line-numbers-rows" ></code-line> [ NSURLConnection sendAsynchronousRequest:request queue:[ NSOperationQueue mainQueue] completionHandler:^( NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { <code-line class = "line-numbers-rows" ></code-line> //实例化xml解析器 <code-line class = "line-numbers-rows" ></code-line> NSXMLParser *parser = [[ NSXMLParser alloc]initWithData:data]; <code-line class = "line-numbers-rows" ></code-line> //设置代理 <code-line class = "line-numbers-rows" ></code-line> parser.delegate = self ; <code-line class = "line-numbers-rows" ></code-line> //开始解析 一旦开始解析 后续工作都是由代理方法实现 <code-line class = "line-numbers-rows" ></code-line> [parser parse]; <code-line class = "line-numbers-rows" ></code-line> }]; <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line> //mark:delegatexml <code-line class = "line-numbers-rows" ></code-line> //打开文档 <code-line class = "line-numbers-rows" ></code-line>-( void )parserDidStartDocument:( NSXMLParser *)parser <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> //清除数组 <code-line class = "line-numbers-rows" ></code-line> [ self .roots removeAllObjects]; <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line> //开始节点 只能读取出节点属性名称跟值 <code-line class = "line-numbers-rows" ></code-line>-( void )parser:( NSXMLParser *)parser didStartElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName attributes:( NSDictionary < NSString *, NSString *> *)attributeDict <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> // NSLog(@"elementName:%@",elementName); <code-line class = "line-numbers-rows" ></code-line> // NSLog(@"namespaceURI:%@",namespaceURI); <code-line class = "line-numbers-rows" ></code-line> // NSLog(@"qName:%@",qName); <code-line class = "line-numbers-rows" ></code-line> // NSLog(@"attributeDict:%@",attributeDict); <code-line class = "line-numbers-rows" ></code-line> if ([elementName isEqualToString:@ "Book" ]) { <code-line class = "line-numbers-rows" ></code-line> self .currentBook = [[Book alloc]init]; <code-line class = "line-numbers-rows" ></code-line> self .currentBook.idd = @([attributeDict[@ "idd" ] intValue]); <code-line class = "line-numbers-rows" ></code-line> // NSLog(@"attributeDict:%@",attributeDict[@"idd"]); <code-line class = "line-numbers-rows" ></code-line> } <code-line class = "line-numbers-rows" ></code-line> [ self .elementString setString:@ "" ]; <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line> //发现节点内容 <code-line class = "line-numbers-rows" ></code-line>-( void )parser:( NSXMLParser *)parser foundCharacters:( NSString *)string <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> [ self .elementString appendString:string]; <code-line class = "line-numbers-rows" ></code-line> // NSLog(@"内容为:%@",string); <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line> //结束节点 <code-line class = "line-numbers-rows" ></code-line>-( void )parser:( NSXMLParser *)parser didEndElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> // NSLog(@"%@",elementName); <code-line class = "line-numbers-rows" ></code-line> if ([elementName isEqualToString:@ "Book" ]) { <code-line class = "line-numbers-rows" ></code-line> [ self .Books addObject: self .currentBook]; <code-line class = "line-numbers-rows" ></code-line> } else if (![elementName isEqualToString:@ "Books" ]){ <code-line class = "line-numbers-rows" ></code-line> [ self .currentBook setValue: self .elementString forKey:elementName]; <code-line class = "line-numbers-rows" ></code-line> } <code-line class = "line-numbers-rows" ></code-line> // }else if ([elementName isEqualToString:@"title"]){ <code-line class = "line-numbers-rows" ></code-line> // self.currentBook.title = self.elementString; <code-line class = "line-numbers-rows" ></code-line> // }else if ([elementName isEqualToString:@"author"]){ <code-line class = "line-numbers-rows" ></code-line> // self.currentBook.author = self.elementString; <code-line class = "line-numbers-rows" ></code-line> // }else if ([elementName isEqualToString:@"summary"]){ <code-line class = "line-numbers-rows" ></code-line> // self.currentBook.summary = self.elementString; <code-line class = "line-numbers-rows" ></code-line> // } <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line> //结束文档 <code-line class = "line-numbers-rows" ></code-line>-( void )parserDidEndDocument:( NSXMLParser *)parser <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> NSLog (@ "文档解析结束:%@" , self .Books); <code-line class = "line-numbers-rows" ></code-line> <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line> //lazy <code-line class = "line-numbers-rows" ></code-line>-( NSMutableArray *)roots <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> if (_Books == nil ) { <code-line class = "line-numbers-rows" ></code-line> _Books = [[ NSMutableArray alloc]init]; <code-line class = "line-numbers-rows" ></code-line> } <code-line class = "line-numbers-rows" ></code-line> return _Books; <code-line class = "line-numbers-rows" ></code-line>} <code-line class = "line-numbers-rows" ></code-line>-( NSMutableString *)elementString <code-line class = "line-numbers-rows" ></code-line>{ <code-line class = "line-numbers-rows" ></code-line> if (_elementString == nil ) { <code-line class = "line-numbers-rows" ></code-line> _elementString = [[ NSMutableString alloc]init]; <code-line class = "line-numbers-rows" ></code-line> } <code-line class = "line-numbers-rows" ></code-line> return _elementString; <code-line class = "line-numbers-rows" ></code-line>} </code-pre> |
__EOF__

本文作者:若云
本文链接:https://www.cnblogs.com/fucker/articles/5037647.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/fucker/articles/5037647.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?