服務(wù)器返回給用戶的數(shù)據(jù),通常是以下兩種方式:
JSON
iOS中的JSON文件解析,是將其轉(zhuǎn)換成OC對(duì)象,如下:
XML
XML文檔,通常包含以下內(nèi)容
XML文檔的解析方案
解析類型
一個(gè)對(duì)象通常要遵循以下規(guī)則才能轉(zhuǎn)換成JSON文檔
JSON數(shù)據(jù)與OC對(duì)象的轉(zhuǎn)化
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error/*** data:需要解析的NSData類型數(shù)據(jù)* opt:解析方式* error:錯(cuò)誤信息*/
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error/*** obj:需要轉(zhuǎn)換的OC對(duì)象* opt:解析方式* error:錯(cuò)誤信息*/
解析NSString
NSString *json = "I am a coder";[NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil]/*** JSON解析的數(shù)據(jù)通常是使用NSUTF8StringEncoding編碼的NSData類型數(shù)據(jù)* options:指定可以解析的類型,NSJSONReadingAllowFragments表示可以解析 NSString對(duì)象* error:返回解析錯(cuò)誤信息* 返回值為解析完成的NSString對(duì)象*/
解析NSDictionary與NSArray(來(lái)自服務(wù)器的數(shù)據(jù))
/**Block的方式發(fā)送請(qǐng)求*///創(chuàng)建請(qǐng)求對(duì)象NSURLRequest *request = [NSURLRequest requestWithURL:(此處為請(qǐng)求路徑)];//發(fā)送請(qǐng)求[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];}];/*** queue:請(qǐng)求任務(wù)所在的隊(duì)列* completionHandler:請(qǐng)求完成回調(diào)的Block * response:服務(wù)器的響應(yīng)信息 * data:服務(wù)器返回的數(shù)據(jù) * error:錯(cuò)誤信息 * 將data解析成對(duì)應(yīng)的NSDictionary對(duì)象*/
小文件解析(NSXMLParser)
// 1. 開始解析XML文檔的時(shí)候調(diào)用- (void)parserDidStartDocument:(NSXMLParser *)parser// 2. 解析到XML文檔中某個(gè)元素的開始的時(shí)候調(diào)用,解析任務(wù)的核心- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict/*** elementName:正在解析的元素的名字* attributeDict:解析生成的OC對(duì)象*/// 3. 解析到XML文檔中某個(gè)元素的結(jié)束的時(shí)候調(diào)用- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName// 4. 解析到XML文檔結(jié)尾的時(shí)候調(diào)用- (void)parserDidEndDocument:(NSXMLParser *)parser
// 1. 創(chuàng)建解析器 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];// 2. 設(shè)置代理parser.delegate = self;// 3. 啟動(dòng)解析器[parser parse];// 4. 在代理方法中完成具體的解析任務(wù)
大文件解析(GDataXML)
與GDataXML相關(guān)的幾個(gè)類
解析步驟
// 1. 將XML文檔數(shù)據(jù),轉(zhuǎn)換成GDataXMLDocument類型的對(duì)象GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];// 2. 獲取GDataXMLDocument對(duì)象中根節(jié)點(diǎn)的所有元素NSArray *elements = [document.rootElement elementsForName:@"此處為元素的名字"];/*** 獲取XML文檔中指定名字的所有元素*/// 3. 解析每個(gè)元素中的數(shù)據(jù)for (GDataXMLElement *ele in elements){ [ele attributeForName:@"此處為元素中的Key"].stringValue; /** * 解析元素ele中鍵值為Key的屬性值,將其轉(zhuǎn)化為字符串對(duì)象 */}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注