IOS 請求數據解析 XML 和 JSON

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

這一段主要接觸的就是數據解析,就說一下數據解析
現在數據解析一般解析兩種數據 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




發佈了56 篇原創文章 · 獲贊 4 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章