什么是JSON
?JSON是一種輕量級(jí)的數(shù)據(jù)格式雹拄,一般用于數(shù)據(jù)交互
?服務(wù)器返回給客戶端的數(shù)據(jù),一般都是JSON格式或者XML格式(文件下載除外)
JSON的格式很像OC中的字典和數(shù)組
{"name" : "jack", "age" : 10}
{"names" : ["jack", "rose", "jim"]}
- 標(biāo)準(zhǔn)JSON格式的注意點(diǎn):key必須用雙引號(hào)
- 要想從JSON中挖掘出具體數(shù)據(jù),得對(duì)JSON進(jìn)行解析
- JSON 轉(zhuǎn)換為 OC數(shù)據(jù)類型
JSON – OC 轉(zhuǎn)換對(duì)照表
JSON – OC 轉(zhuǎn)換練習(xí)
JSON解析方案
- 在iOS中蛤高,JSON的常見解析方案有4種
第三方框架:JSONKit贾费、SBJson、TouchJSON(性能從左到右翻翩,越差)
蘋果原生(自帶):NSJSONSerialization(性能最好)
NSJSONSerialization的常見方法
JSON數(shù)據(jù) -> OC對(duì)象
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
OC對(duì)象 -> JSON數(shù)據(jù)
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
解析來(lái)自服務(wù)器的JSON
XML
?什么是XML
全稱是Extensible Markup Language都许,譯作“可擴(kuò)展標(biāo)記語(yǔ)言”
跟JSON一樣,也是常用的一種用于交互的數(shù)據(jù)格式
?一般也叫XML文檔(XML Document)
NSXMLParser
使用步驟
// 傳入XML數(shù)據(jù)嫂冻,創(chuàng)建解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 設(shè)置代理胶征,監(jiān)聽解析過(guò)程
parser.delegate=self;
// 開始解析[parser parse];
- NSXMLParser采取的是SAX方式解析,特點(diǎn)是事件驅(qū)動(dòng)桨仿,下面情況都會(huì)通知代理
- 當(dāng)掃描到文檔(Document)的開始與結(jié)束
- 當(dāng)掃描到元素(Element)的開始與結(jié)束
NSXMLParserDelegate
當(dāng)掃描到文檔的開始時(shí)調(diào)用(開始解析)
- (void)parserDidStartDocument:(NSXMLParser *)parser
當(dāng)掃描到文檔的結(jié)束時(shí)調(diào)用(解析完畢)
- (void)parserDidEndDocument:(NSXMLParser *)parser
當(dāng)掃描到元素的開始時(shí)調(diào)用(attributeDict存放著元素的屬性)
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
當(dāng)掃描到元素的結(jié)束時(shí)調(diào)用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
GDataXML配
GDataXML使用
- GDataXML中常用的類
? ? ?- GDataXMLDocument:代表整個(gè)XML文檔
? ? ?- GDataXMLElement
? ? ? ? ? ? - 代表文檔中的每個(gè)元素
? ? ? ? ? ? - 使用attributeForName:方法可以獲得屬性值