IOS 請求資料解析 XML 和 JSON

來源:互聯網
上載者:User

好久沒寫文章了,回憶一下以前的內容記錄一下吧。

這一段主要接觸的就是資料解析,就說一下資料解析
現在資料解析一般解析兩種資料 xml 和 JSON
那就從xml解析說起吧
xml解析需要用到一個類 NSXMLParser 以及一個協議 NSXMLParserDelegate
首先NSXMLParser是一個 xml 解析器

要解析資料首先建立一個xml解析器

NSXMLParser *XMLParser = [[NSXMLParser alloc]initWithData:data];

其中data就是我們要解析的資料


然後執行解析就行 [XMLParser parse];
執行解析時就會回調以下協議中的幾個方法

#pragma mark NSXMLParserdelegate---
//開始解析文檔
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
//文檔開始解析的時候調用,在這裡可以初始化一些東西
}

//解析文檔結束
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//文檔解析完成時調用,這裡可以寫解析完成後的操作
}

//標籤解析開始
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
//標籤開始解析,其中elementName就是開始標籤的名稱
}

//標籤解析結束
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//標籤開始解析,其中elementName就是結束標籤的名稱,
//在這裡你可以做一些邏輯判斷,看這個標籤裡的東西是不是自己需要的,然後進行操作
}

//解析出來的標籤值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// string 這個就是當前解析標籤的值,
}


其實還有一種xml解析的方法,就是dom解析,它是把XML看成樹型結構,先找到根節點,
然後利用迴圈嵌套,遍曆根節點的子節點,遍曆子節點的子節點,一直遍曆到葉子節點,當然葉子節點
是最後一層了,裡面就是我們要得資料。
這種方法我感覺不好用,太麻煩,迴圈嵌套太多。所以不推薦使用
而且需要匯入libxml2.dylib這個類庫,最後還得修改路徑 /usr/include/libxml2
但是在這裡我還是把這個第三方類給出來吧
http://pan.baidu.com/s/1sjtXAUh


好接下來就是我們的JSON解析了。
我感覺JSON解析的解析過程不重要,重要的是JSON解析之後對結果的處理
JSON解析後是個dictionary,但是字典中有可能包含字典和數組,數組中還可以包含字典。
新浪微博的請求微博返回的資料經過JSON解析結果就是這樣的。
下面就簡單介紹一下JSON解析過程
其實就一句話

data就是解析資料
//IOS5內建解析類NSJSONSerialization從data中解析出資料放到字典中
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:Data options:NSJSONReadingMutableLeaves error:&error];

//TouchJSON
//將解析得到的內容存放字典中
NSDictionary *pRootDic = [[CJSONDeserializer deserializer]deserialize:data error:&error];
//這裡的解析對象是NSData類型

//SBJSON
// 擷取一個解析器對象
SBJsonParser *parser = [[[SBJsonParser alloc] init]autorelease];
//擷取json串解析後返回的字典
NSDictionary *rootDic = [parser objectWithString:String error:&error];
//需要注意的是要先把解析的資料給解碼為NSString類型然後才可以解析

//JSONKit
//擷取解析後的字典(完成解析,返回值為字典類型)
NSDictionary *pWeatherDic = [jsonStr objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];//統一編碼通訊協定
//注意 jsonStr還是把資料先解碼為NSString型,之後jsonStr直接用解析方法就行了


//這裡附帶一個把data轉化為NSString類型的方法
NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

下面附上TouchJSON,SBJSON 和 JSONKit的第三方類的連結
http://pan.baidu.com/s/1bnpGwxD



好了今天就到這裡,把最近學的知識分享給大家,如有錯誤歡迎指正 —— LC




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.