基本情況
Cocos2d-x可以開發遊戲,它提供了多種網路連線方式,即時通信Socket、WebSocket、基於http的HttpCline、curl等等。在網路通信過程中,需要傳輸數據,常用的數據格式有兩種,一種是JSON,另外一種是XML,Cocos2d-x對這些數據格式的解析提供了支持,主要為:JOSN數據解析、XML數據解析。
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。它使得人們可以很容易地進行閱讀和編寫,同時也方便了機器進行解析和生成。JSON採用完全獨立於程式語言的文本格式,但是也使用了類C語言的習慣(包括C、C++、C#、Java、JavaScript、Perl和Python等),這些特性使得JSON成為理想的數據交換語言。
TinyXML是一個開源的解析XML的解析庫,Cocos2d-x集成了該庫,在Cocos2d-x項目的根目錄的extemal/tinyxml2目錄下面有該類的實現。TinyXML解析庫通過解析XML檔案,在記憶體中生成DOM模型,從而使我們可以很方便地遍歷這棵XML樹。
JSON數據解析
在Cocos2d.x根目錄的external/json目錄下面,是JSON處理的相關類,這裡主要使用document.h這個頭檔案,該檔案中的兩個核心類是GenericValue和GenericDocument,GenericDocument繼承GeneficValue。使用GenericDocument用來處理文檔內容,如解析文檔內容;而GenericValue主要處理值內容,即文檔內部的key-value鍵值對內容,可以根據key獲得value。GenericValue和GenericDocument都被重新進行了類型定義。所以可以使用類型定義後的名稱。
typedef GenericDocument<UTF8<>>Document;
typedef GenericValue<UFT8<>>Value;
Value重載了數組下標操作符[],所以我們可以使用該操作符,根據JSON檔案中的key獲得value。
const GenericValue & operator [] (const Ch* name) const{
const_cast<GenericValue&>(*this)[name];}
Value還提供了一組GetXXX方法,根據不同的數據類型,獲得相應的值。
通過一個實例來演示如何解析JSON數據,操作步驟如下:
創建JSON檔案
在項目的classes資料夾下創建一個JSON檔案,內容如下:
在該檔案中,pets是一個數組,表示寵物,有兩個值dog和pet;stuInfo是一個學生信息;後面是一個usename;最後還有一個other數組。
在類中包含document.h和cocos-ext.h頭檔案
通過FileUtils獲得JSON檔案路徑
通過Document對象解析JOSN數據
獲得不同類型的數據值
通過數組下標操作符[],根據key獲得Value,並使用Value的GetXXX方法獲得不同類型的數據值。
XML數據解析
在TinyXML中,根據XML的各種元素定義了一些類。
(1)class XMLDocument:文檔;
(2)class XMLElement:元素;
(3)class XMLAttribute:屬性;
(4)class XMLComment:注釋;
(5)class XMLNode:節點;
(6)class XMLText:文本;
(7)class XMLDeclaration:聲明;
(8)class XMLUnknown:未知部分。
一個解析XML檔案的實例的具體操作步驟如下:
創建XML檔案
在項目的Classes目錄下面創建一個XML檔案,檔案內容如下;
上述檔案中有三個學生信息,每一個學生信息中又有學號(stu_num)、姓名(stu_name)、班級(stu_class)三個元素。
在類中包含頭檔案並使用命名空間
獲得XML檔案全路徑
創建檔案檔,並載入XML檔案
獲得元素並解析
獲得XML檔案的根元素及其子元素和兄弟元素,並進行解析,具體如下: