麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

iOS網(wǎng)絡(luò)-02-數(shù)據(jù)解析(JSON與XML)

2019-11-14 18:30:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

數(shù)據(jù)交互格式


  • 服務(wù)器返回給用戶的數(shù)據(jù),通常是以下兩種方式:

  • JSON

    • 一種輕量級(jí)的數(shù)據(jù)數(shù)據(jù)格式,體積比XML小,是服務(wù)器返回給移動(dòng)端通常采用的格式
    • 用使用JSON文件中的數(shù)據(jù),需要對(duì)其進(jìn)行解析,蘋果的NSJSONSerialization解析性能最好
    • iOS中的JSON文件解析,是將其轉(zhuǎn)換成OC對(duì)象,如下:

      • 大括號(hào){} --> 字典NSDictionary
      • 中括號(hào)[] --> 數(shù)組NSArray
      • 雙引號(hào)"" --> 字符串NSString
      • 數(shù)字 --> NSNumber
    • JSON通常使用NSJSONSerialization進(jìn)行解析,性能最好
  • XML

    • XML(Extension Markup Language),可擴(kuò)展標(biāo)記語(yǔ)言
    • 是服務(wù)器返回客戶端常用的一種數(shù)據(jù)格式
    • XML文檔,通常包含以下內(nèi)容

      • 文檔聲明
      • 元素(element)
      • 屬性(attribute)
    • XML文檔的解析方案

      • 小文件:NSXMLParser蘋,果原生
      • 大文件:GDataXML,Google開發(fā),基于libxml2

JSON解析


  • 解析類型

    • 默認(rèn)解析NSDictionary與NSArray類型的數(shù)據(jù)
    • 若要解析NSString類型的數(shù)據(jù),需要使用NSJSONReadingAllowFragments參數(shù)
  • 一個(gè)對(duì)象通常要遵循以下規(guī)則才能轉(zhuǎn)換成JSON文檔

    • 根節(jié)點(diǎn)是NSDictionary或NSArray類型
    • 所有的對(duì)象必須是NSString、NSNumber、NSArray、NSDictionary或NSNull中的一種
    • 對(duì)象個(gè)數(shù)有限
  • JSON數(shù)據(jù)與OC對(duì)象的轉(zhuǎn)化

    • JSON --> OC
    + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error/*** data:需要解析的NSData類型數(shù)據(jù)* opt:解析方式* error:錯(cuò)誤信息*/
    • OC --> Json
    + (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ì)象*/

XML解析


  • 小文件解析(NSXMLParser)

    • 通過(guò)NSXMLParser解析XML文檔,需要用到代理協(xié)議NSXMLParserDelegate
    • NSXMLParserDelegate協(xié)議的常用方法
    // 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è)類

      • GDataXMLDocument,整個(gè)XML文檔
      • GDataXMLElement,XML文檔中的一個(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ì)象	*/}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费网址黄 | 久久国产成人精品国产成人亚洲 | 午夜国产成人 | 日本一区二区久久 | 国产精品久久国产精麻豆96堂 | 韩国一大片a毛片 | 9797色| 日韩中文一区 | 99在线精品视频免费观看20 | 国产又粗又爽又深的免费视频 | 干色视频| 免费观看一区二区三区视频 | 在线小视频国产 | 在线a毛片免费视频观看 | 亚洲人成中文字幕在线观看 | 日韩av片网站 | 国产手机av在线 | 午夜精品视频在线 | 亚洲一级片在线观看 | av在线免费播放 | 91精品国产综合久久婷婷香蕉 | 72pao成人国产永久免费视频 | 欧美一级黄色免费 | 黄色一级片毛片 | 性欧美xxxx极品摘花 | 国产91一区| 免费黄色大片在线观看 | 亚洲午夜影院在线观看 | 国产成年人视频网站 | 久久影院国产精品 | 亚洲精中文字幕二区三区 | 欧美一级视频免费看 | 羞羞视频免费网站男男 | 久久久一区二区三区四区 | 看一级毛片 | chinese 军人 gay xx 呻吟 | 欧美成人精品一区二区男人小说 | 中文欧美日韩 | 久久精品国产久精国产 | www成人在线观看 | 成人资源在线观看 |