JSON&XML解析
JSON
使用JSONKit 需要添加-fno-objc-arc 是mrc的 修改之后 进行isa 替换 就能编译通过
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [NSString stringWithFormat:@"/Users/wyc/Desktop/jsontext.date"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSURL *url = [NSURL URLWithString:@"file:///Users/wyc/Desktop/jsontext.date"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
id result = [[JSONDecoder decoder]objectWithData:data];
NSDictionary *dic = [result objectForKey:@"people"];
for (id item in dic) {
NSLog(@"%@",item[@"email"]);
NSLog(@"%@",item[@"firstName"]);
NSLog(@"%@",item[@"lastName"]);
}
}];
}
XML
@interface Book : NSObject
@property (nonatomic, assign) NSInteger idd;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *author;
@property (nonatomic, copy) NSString *summary;
@end
#import "Book.h"
@interface ViewController ()<NSXMLParserDelegate>
//目标数组
@property (nonatomic, strong) NSMutableArray *Books;
//当前正在解析的对象
@property (nonatomic, strong) Book *currentBook;
//拼接字符串
@property (nonatomic, strong) NSMutableString *elementString;
@end
- (void)viewDidLoad {
[super viewDidLoad];
[self loadXML];
}
-(void)loadXML
{
NSURL *url = [NSURL URLWithString:@"file:///Users/wyc/Desktop/aaa.xml"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//实例化xml解析器
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
//设置代理
parser.delegate = self;
//开始解析 一旦开始解析 后续工作都是由代理方法实现
[parser parse];
}];
}
//mark:delegatexml
//打开文档
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
//清除数组
[self.roots removeAllObjects];
}
//开始节点 只能读取出节点属性名称跟值
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
// NSLog(@"elementName:%@",elementName);
// NSLog(@"namespaceURI:%@",namespaceURI);
// NSLog(@"qName:%@",qName);
// NSLog(@"attributeDict:%@",attributeDict);
if ([elementName isEqualToString:@"Book"]) {
self.currentBook = [[Book alloc]init];
self.currentBook.idd = @([attributeDict[@"idd"] intValue]);
// NSLog(@"attributeDict:%@",attributeDict[@"idd"]);
}
[self.elementString setString:@""];
}
//发现节点内容
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[self.elementString appendString:string];
// NSLog(@"内容为:%@",string);
}
//结束节点
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// NSLog(@"%@",elementName);
if ([elementName isEqualToString:@"Book"]) {
[self.Books addObject:self.currentBook];
}else if (![elementName isEqualToString:@"Books"]){
[self.currentBook setValue:self.elementString forKey:elementName];
}
// }else if ([elementName isEqualToString:@"title"]){
// self.currentBook.title = self.elementString;
// }else if ([elementName isEqualToString:@"author"]){
// self.currentBook.author = self.elementString;
// }else if ([elementName isEqualToString:@"summary"]){
// self.currentBook.summary = self.elementString;
// }
}
//结束文档
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"文档解析结束:%@",self.Books);
}
//lazy
-(NSMutableArray *)roots
{
if (_Books == nil) {
_Books = [[NSMutableArray alloc]init];
}
return _Books;
}
-(NSMutableString *)elementString
{
if (_elementString == nil) {
_elementString = [[NSMutableString alloc]init];
}
return _elementString;
}

浙公网安备 33010602011771号