我爱编程

JSON和XML

2017-02-15  本文已影响24人  Coder007

数据解析

json格式

/**
 NSJSONReadingMutableContainers //  创建出来的数组和字典就是可变
 NSJSONReadingMutableLeaves  // 数组或者字典里面的字符串是可变的
 NSJSONReadingAllowFragments // 允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumber
 */
 // 前面用什么容器接收,options使用那个枚举,这些都需要根据实际情况选择
 // 如果不用关心容器是否可变,那么可以使用kNilOptions
[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

// OC对象转换成JSON对象
// obj是OC对象
[NSJSONSerialization dataWithJSONObject:obj options:NSJSONWritingPrettyPrinted error:nil];

XML解析

NSXMLParser
// 传入XML数据,创建解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 设置代理,监听解析过程
parser.delegate = self;
// 开始解析
[parser parse];

// 当扫描到文档的开始时调用(开始解析)
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
}

// 开始解析节点“元素”
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
}
// 发现节点文本字符
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
}

// 结束节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
}

// 当扫描到文档的结束时调用(解析完毕)
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
}

// 解析错误
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
}
GDataXML
// 加载整个文档
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

// 获得所有video元素
NSArray *elements = [doc.rootElement elementsForName:@"video"];
for (GDataXMLElement *ele in elements) {
    YWVideo *video = [[YWVideo alloc] init];
    video.name = [ele attributeForName:@"name"].stringValue;
     // 类似的取出其他数据
     
    // 添加到数组
    [self.videos addObject:video];
}
上一篇 下一篇

猜你喜欢

热点阅读