OC,oc語言

來源:互聯網
上載者:User

OC,oc語言

##資料互動格式

  • 伺服器返回給使用者的資料,通常是以下兩種方式:
    • JSON
    • XML
  • JSON
    • 一種輕量級的資料資料格式,體積比XML小,是伺服器返回給移動端通常採用的格式
    • 用使用JSON檔案中的資料,需要對其進行解析,蘋果的NSJSONSerialization解析效能最好
    • iOS中的JSON檔案解析,是將其轉換成OC對象,如下:
      • 大括弧{} --> 字典NSDictionary
      • 中括弧[] --> 數組NSArray
      • 雙引號"" --> 字串NSString
      • 數字 --> NSNumber
    • JSON通常使用NSJSONSerialization進行解析,效能最好
  • XML
    • XML(Extension Markup Language),可延伸標記語言 (XML)
    • 是伺服器返回用戶端常用的一種資料格式
    • XML文檔,通常包含以下內容
      • 文檔聲明
      • 元素(element)
      • 屬性(attribute)
    • XML文檔的解析方案
      • 小檔案:NSXMLParser蘋,果原生
      • 大檔案:GDataXML,Google開發,基於libxml2

##JSON解析

  • 解析類型

    • 預設解析NSDictionary與NSArray類型的資料
    • 若要解析NSString類型的資料,需要使用NSJSONReadingAllowFragments參數
  • 一個對象通常要遵循以下規則才能轉換成JSON文檔

    • 根節點是NSDictionary或NSArray類型
    • 所有的對象必須是NSString、NSNumber、NSArray、NSDictionary或NSNull中的一種
    • 對象個數有限
  • JSON資料與OC對象的轉化

    • JSON --> OC
    + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error/*** data:需要解析的NSData類型資料* opt:解析方式* error:錯誤資訊*/
    • OC --> Json
    + (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error/*** obj:需要轉換的OC對象* opt:解析方式* error:錯誤資訊*/
  • 解析NSString

    NSString *json = "I am a coder";[NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil]/*** JSON解析的資料通常是使用NSUTF8StringEncoding編碼的NSData類型資料* options:指定可以解析的類型,NSJSONReadingAllowFragments表示可以解析   NSString對象* error:返回解析錯誤資訊* 傳回值為解析完成的NSString對象*/
  • 解析NSDictionary與NSArray(來自伺服器的資料)

    /**Block的方式發送請求*///建立請求對象NSURLRequest *request = [NSURLRequest requestWithURL:(此處為請求路徑)];//發送請求[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];}];/*** queue:請求任務所在的隊列* completionHandler:請求完成回調的Block    * response:伺服器的響應資訊    * data:伺服器返回的資料    * error:錯誤資訊    * 將data解析成對應的NSDictionary對象*/

##XML解析

  • 小檔案解析(NSXMLParser)

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

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

     

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.