日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

iOS - - JSON 和 XML解析

發(fā)布時(shí)間:2025/3/15 asp.net 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS - - JSON 和 XML解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JSON 和 XML

一、JSON

1.什么是JSON

  • JSON是一種輕量級(jí)的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互
  • 服務(wù)器返回給客戶端的數(shù)據(jù),一般都是JSON格式或者XML格式(文件下載除外)

2.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)行解析
JSONOC
大括號(hào){}NSDictionary
中括號(hào)[]NSArray
雙引號(hào)""NSString
數(shù)字NSNumber
true/falseNSNumber
nullNSNull
  • JSON 轉(zhuǎn)換為 OC數(shù)據(jù)類型

3.在iOS中,JSON的常見解析方案有4種

①第三方框架:JSONKit、SBJson、TouchJSON(性能從左到右,越差)

②蘋果原生(自帶):NSJSONSerialization(性能最好)

NSJSONSerialization的常見方法

JSON數(shù)據(jù) -> OC對(duì)象
/*第一個(gè)參數(shù):需要解析的JSON數(shù)據(jù)第二個(gè)參數(shù):解析JSON的可選配置參數(shù)NSJSONReadingMutableContainers 解析出來的字典和數(shù)組是可變的NSJSONReadingMutableLeaves 解析出來的對(duì)象中得字符串是可變的,iOS7以后有問題NSJSONReadingAllowFragments 解析出來的JSON數(shù)據(jù)既不是字典也不是數(shù)組,那么就必須使用這個(gè)*/ + (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
iOS5自帶解析類NSJSONSerialization從response中解析出數(shù)據(jù)放到字典中
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
OC對(duì)象 -> JSON數(shù)據(jù)
/*第一個(gè)參數(shù):需要轉(zhuǎn)換為JSON數(shù)據(jù)的OC對(duì)象第二個(gè)參數(shù):毫無意義NSJSONWritingPrettyPrinted:對(duì)轉(zhuǎn)換之后的JSON進(jìn)行排版 */ + (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

4.查看復(fù)雜的JSON數(shù)據(jù)

①在線轉(zhuǎn)換,查看格式化

http://tool.oschina.net/codeformat/json

②直接將轉(zhuǎn)換后的數(shù)據(jù)寫到本地

NSDictionary *Dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; [dict writeToFile:@"路徑" atomically:YES];

5.JSON轉(zhuǎn)字典,字典再模型

  • Mantle
    • 所有的模型都必須繼承自MTModel
  • JSONModel
    • 所有的模型都必須繼承自JSONModel
  • MJExtension
    • 不需要強(qiáng)制繼承任何其他類

設(shè)計(jì)框架需要考慮的問題

  • 侵入性
    • 侵入性大就意味著很難離開這個(gè)框架
  • 易用性
    • 比較少量代碼實(shí)現(xiàn)N多功能
  • 擴(kuò)展性
    • 很容易給這個(gè)框架增加新框架

二、XML

1.什么是XML

  • 全稱是Extensible Markup Language,譯作“可擴(kuò)展標(biāo)記語言”
  • 跟JSON一樣,也是常用的一種用于交互的數(shù)據(jù)格式
  • 一般也叫XML文檔(XML Document)

2.XML舉例

<videos><video name="小黃人 第01部" length="30" /><video name="小黃人 第02部" length="19" /><video name="小黃人 第03部" length="33" /> </videos>

3.一個(gè)常見的XML文檔一般由以下部分組成

  • 文檔聲明
  • 元素(Element)
  • 屬性(Attribute)

4.在XML文檔的最前面,必須編寫一個(gè)文檔聲明,用來聲明XML文檔的類型

  • 最簡(jiǎn)單的聲明

    • <?xml version="1.0" ?>
  • 用encoding屬性說明文檔的字符編碼

    • <?xml version="1.0" encoding="UTF-8" ?>

5.一個(gè)元素包括了開始標(biāo)簽和結(jié)束標(biāo)簽

  • 擁有內(nèi)容的元素:<video>小黃人</video>
  • 沒有內(nèi)容的元素:<video></video>
  • 沒有內(nèi)容的元素簡(jiǎn)寫:<video/>
  • 一個(gè)元素可以嵌套若干個(gè)子元素(不能出現(xiàn)交叉嵌套)
<videos><video><name>小黃人 第01部</name><length>30</length></video> </videos>
  • 規(guī)范的XML文檔最多只有1個(gè)根元素,其他元素都是根元素的子孫元素

6.XML中的所有空格和換行,都會(huì)當(dāng)做具體內(nèi)容處理

  • 下面兩個(gè)元素的內(nèi)容是不一樣的
    • 第1個(gè)
    • <video>小黃人</video>
  • 第2個(gè)
<video>小黃人 </video>

7.一個(gè)元素可以擁有多個(gè)屬性

  • <video name="小黃人 第01部" length="30" />

    • video元素?fù)碛衝ame和length兩個(gè)屬性
    • 屬性值必須用 雙引號(hào)"" 或者 單引號(hào)'' 括住
  • 實(shí)際上,屬性表示的信息也可以用子元素來表示,比如

<video><name>小黃人 第01部</name><length>30</length> </video>

三、XML解析

  • 要想從XML中提取有用的信息,必須得學(xué)會(huì)解析XML
  • 提取name元素里面的內(nèi)容
  • <name>小黃人 第01部</name>

提取video元素中name和length屬性的值

  • <video name="小黃人 第01部" length="30" />

1.XML的解析方式有2種

  • DOM:一次性將整個(gè)XML文檔加載進(jìn)內(nèi)存,比較適合解析小文件
  • SAX:從根元素開始,按順序一個(gè)元素一個(gè)元素往下解析,比較適合解析大文件

iOS中的XML解析

在iOS中,解析XML的手段有很多

1.蘋果原生
  • NSXMLParser:SAX方式解析,使用簡(jiǎn)單
2.第三方框架
  • libxml2:純C語言,默認(rèn)包含在iOS SDK中,同時(shí)支持DOM和SAX方式解析
  • GDataXML:DOM方式解析,由Google開發(fā),基于libxml2
XML解析方式的選擇建議
  • 大文件:NSXMLParser、libxml2
  • 小文件:GDataXML、NSXMLParser、libxml2

2.NSXMLParser

  • NSXMLParser采取的是SAX方式解析,特點(diǎn)是事件驅(qū)動(dòng),下面情況都會(huì)通知代理
    • 當(dāng)掃描到文檔(Document)的開始與結(jié)束
    • 當(dāng)掃描到元素(Element)的開始與結(jié)束

使用步驟

①.開始解析
// 傳入XML數(shù)據(jù),創(chuàng)建解析器 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; // 設(shè)置代理,監(jiān)聽解析過程 parser.delegate = self; // 開始解析(parse方法是阻塞式的) [parser parse];
②.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

3.GDataXML

①GDataXML配置

  • GDataXML基于libxml2庫(kù),得做以下配置
  • 導(dǎo)入libxml2庫(kù)

  • 設(shè)置libxml2的頭文件搜索路徑(為了能找到libxml2庫(kù)的所有頭文件)

    • 在Head Search Path中加入/usr/include/libxml2
  • 設(shè)置鏈接參數(shù)(自動(dòng)鏈接libxml2庫(kù))

    • 在Other Linker Flags中加入-lxml2
  • 由于GDataXML是非ARC的,因此得設(shè)置編譯參數(shù)

    • -fno-objc-arc

②GDataXML使用

GDataXML中常用的類
  • GDataXMLDocument:代表整個(gè)XML文檔
GDataXMLElement
  • 代表文檔中的每個(gè)元素
  • 使用attributeForName:方法可以獲得屬性值
// 1.創(chuàng)建URLNSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/video?type=XML"];// 2.根據(jù)URL創(chuàng)建Request NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 3.利用NSURLConnection發(fā)送請(qǐng)求 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 1.加載所有的xml到內(nèi)存中 GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:kNilOptions error:nil]; // 2.獲取根元素 GDataXMLElement *rootElement = doc.rootElement; // 3.從根元素中獲取所有子元素 NSArray *elements = [rootElement elementsForName:@"video"]; // 4.將子元素中的屬性轉(zhuǎn)換為模型 for (GDataXMLElement *ele in elements) { XMGVideo *video = [[XMGVideo alloc] init]; video.image = [ele attributeForName:@"image"].stringValue; video.url = [ele attributeForName:@"url"].stringValue; video.name = [ele attributeForName:@"name"].stringValue; video.length = @([ele attributeForName:@"length"].stringValue.integerValue); [self.videos addObject:video]; } [self.tableView reloadData]; }];

四、JSON和XML比較

  • 同一份數(shù)據(jù),既可以用JSON來表示,也可以用XML來表示
  • 相比之下,JSON的體積小于XML,所以服務(wù)器返回給移動(dòng)端的數(shù)據(jù)格式以JSON居多

五、利用蘋果官方API播放視頻

// 創(chuàng)建視頻播放器 MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:urlStr]];// 顯示視頻 [self presentViewController:vc animated:YES completion:nil];

轉(zhuǎn)載于:https://www.cnblogs.com/ShaoYinling/p/4719684.html

總結(jié)

以上是生活随笔為你收集整理的iOS - - JSON 和 XML解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。