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

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

OC-13.數(shù)據(jù)解析(JSON與XML)

2019-11-14 18:00:40
字體:
供稿:網(wǎng)友

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


  • 服務(wù)器返回給用戶的數(shù)據(jù),通常是以下兩種方式:
  • JSON
    • 一種輕量級的數(shù)據(jù)數(shù)據(jù)格式,體積比XML小,是服務(wù)器返回給移動端通常采用的格式
    • 用使用JSON文件中的數(shù)據(jù),需要對其進(jìn)行解析,蘋果的NSJSONSerialization解析性能最好
    • iOS中的JSON文件解析,是將其轉(zhuǎn)換成OC對象,如下:
      • 大括號{} --> 字典NSDictionary
      • 中括號[] --> 數(shù)組NSArray
      • 雙引號"" --> 字符串NSString
      • 數(shù)字 --> NSNumber
    • JSON通常使用NSJSONSerialization進(jìn)行解析,性能最好
  • XML
    • XML(Extension Markup Language),可擴(kuò)展標(biāo)記語言
    • 是服務(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ù)
  • 一個對象通常要遵循以下規(guī)則才能轉(zhuǎn)換成JSON文檔

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

    • JSON --> OC
    + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error/*** data:需要解析的NSData類型數(shù)據(jù)* opt:解析方式* error:錯誤信息*/
    • OC --> Json
    + (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error/*** obj:需要轉(zhuǎn)換的OC對象* opt:解析方式* error:錯誤信息*/
  • 解析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對象* error:返回解析錯誤信息* 返回值為解析完成的NSString對象*/
  • 解析NSDictionary與NSArray(來自服務(wù)器的數(shù)據(jù))

    /**Block的方式發(fā)送請求*///創(chuàng)建請求對象NSURLRequest *request = [NSURLRequest requestWithURL:(此處為請求路徑)];//發(fā)送請求[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];}];/*** queue:請求任務(wù)所在的隊列* completionHandler:請求完成回調(diào)的Block    * response:服務(wù)器的響應(yīng)信息    * data:服務(wù)器返回的數(shù)據(jù)    * error:錯誤信息    * 將data解析成對應(yīng)的NSDictionary對象*/

##XML解析


  • 小文件解析(NSXMLParser)

    • 通過NSXMLParser解析XML文檔,需要用到代理協(xié)議NSXMLParserDelegate
    • NSXMLParserDelegate協(xié)議的常用方法
    // 1. 開始解析XML文檔的時候調(diào)用- (void)parserDidStartDocument:(NSXMLParser *)parser// 2. 解析到XML文檔中某個元素的開始的時候調(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對象*/// 3. 解析到XML文檔中某個元素的結(jié)束的時候調(diào)用- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName// 4. 解析到XML文檔結(jié)尾的時候調(diào)用- (void)parserDidEndDocument:(NSXMLParser *)parser
    • 解析步驟
    // 1. 創(chuàng)建解析器 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];// 2. 設(shè)置代理parser.delegate = self;// 3. 啟動解析器[parser parse];// 4. 在代理方法中完成具體的解析任務(wù)
  • 大文件解析(GDataXML)

    • 與GDataXML相關(guān)的幾個類
      • GDataXMLDocument,整個XML文檔
      • GDataXMLElement,XML文檔中的一個元素
    • 解析步驟
    // 1. 將XML文檔數(shù)據(jù),轉(zhuǎn)換成GDataXMLDocument類型的對象GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];// 2. 獲取GDataXMLDocument對象中根節(jié)點(diǎn)的所有元素NSArray *elements = [document.rootElement elementsForName:@"此處為元素的名字"];/*** 獲取XML文檔中指定名字的所有元素*/// 3. 解析每個元素中的數(shù)據(jù)for (GDataXMLElement *ele in elements){    [ele attributeForName:@"此處為元素中的Key"].stringValue;    /**    * 解析元素ele中鍵值為Key的屬性值,將其轉(zhuǎn)化為字符串對象    */}

     

 
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费a视频 | 蜜桃麻豆视频 | 国产品久久 | 精品国产一区二区三区在线观看 | 羞羞网站在线观看入口免费 | 欧美一级做性受免费大片免费 | 日韩毛片一区二区三区 | 欧美 日本 在线 | 久久精品在这里 | 国产精品999在线观看 | 黄网站在线播放视频免费观看 | 久久草在线视频免费 | 国产不卡av在线 | 亚洲午夜网站 | 国产毛片在线高清视频 | 夜间福利网站 | 日日草夜夜 | 日韩av成人 | 最新黄色毛片 | 久久9999久久 | 日本黄色大片免费 | 九九热国产在线 | 天天看天天摸天天操 | 国产色妞影院wwwxxx | 成人国产精品一区二区毛片在线 | 国产精品视频亚洲 | 毛片视频网站在线观看 | 毛片视频大全 | 亚洲一二区视频 | 一级做a爰片性色毛片2021 | 日本黄色免费片 | 在线看一区二区三区 | 日韩av官网 | 最新黄色电影网站 | 国产 日韩 一区 | 羞羞视频免费网站男男 | 欧美a区 | 成人 精品 | 99欧美精品 | 久久国产经典 | 久久久新 |