在網路通信過程中需要傳輸數據,常用的數據格式有兩種:JSON、XML。Cocos2d-x對JSON和XML這兩種數據格式的解析提供了支持,主要為:JOSN數據解析、XML數據解析。JOSN數據解析的過程為:首先創建JSON檔案,然後在類中包含document.h和cocos-ext.h頭檔案,接著通過FileUtils獲得JSON檔案路徑,並通過Document對象解析JSON數據,最終獲得不同類型的數據值。XML數據解析的過程為:首先創建XML檔案,接著在類中包含頭檔案並使用命名檔案,然後獲得XML檔案全路徑,並載入XML檔案,最後獲得元素並解析。
基本介紹
- 中文名:數據解析
- 外文名:Data analysis
- 平台基礎:Cocos2d-x
- 兩種解析:JOSN數據解析、XML數據解析
- 解析庫:TinyXML
- 套用領域:Cocos2d-x3.x遊戲開發
基本情況
JSON數據解析
{"pets":["dog","cat"],"stuInfo":{"stuAge":23,"stuName":"rose","birthday":"1990-01-12"},"username","tom","other":[true,30]}
#include "cocos-ext.h"#include "json/document.h"
const char* file_path = FileUtils::getInstance()->fullPathForFilename("hello.json").c_str();log("檔案路徑path=%s",file_path);
//文檔對象rapidjson::Document dl;//獲得JSON字元串內容std::string contentStr = FileUtils::getInstance()->getStringFromFile(file_path);//解析dl.Parse<0>(contentStr.c_str());//輸出JSON檔案的內容printf("%s\n",contentStr.c_str());
//獲取JSON中數組的方法(寵物數組)[dog,cat]const rapidjson::Value & v=d1["pets"];for(unsigned int i=0;i<v.Size();++i){const rapidjson::Value & val=v[i];log("%s",val.GetString());}//根據key獲得value(學生信息)"stuInfo":{"stuAge":23,"stuName":"rose","birthday":"1990-01-12"}const rapidjson::Value & v2=d1["stuInfo"];//獲得整型值const rapidjson::Value&val1 = v2["stuAge"];log("val.GetString()=%d",vall.GetInt());//獲得字元串值const rapidjson::Value&val2 = v2["stuName"];log("val.GetString()=%s",val2.GetString());//獲得字元串值const rapidjson::Value&val3 = v2["birthday"];log("val.GetString()=%s",val3.GetString());//根據key獲得value(other)"other":[true,30]const rapidjson::Value&v3=d1["other"];for(unsigned int i=0;i<v3.Size();++i){ const rapidjson::Value&val=v3[i]; if(val.IsBool()){ log("%d",val.GetBool()); } if(val.IsInt()){ log("%d",val.GetInt()); } }
XML數據解析
<?xml version="1.0" encoding=”UTF8”?><student 1ist> <student> <stu_num>2014100101</stu_num> <stu_name>tom</stu_name> <stu_class>C01</stu_class> </student> <studant> <stu_num>2014100102</stu_num> <stu_name>kite</stu_name> <stu_class>C02</stu_class> </student> <student> <stu_num>2014100103</stu_num> <stu_name>rose</stu_name> <stu_class>C02</stu_class> </student></student_list>
#include "cocos-ext.h"#include "tinyxml2/tinyxml2.h"using namespace tinyxml2;
//獲得外部檔案路徑const char*file_path = FileUtils::getInstance()->fullPathFoeFilename("test.xml").c_str();//列印輸出log("external file path = %s",file_path)
//創建XMLDocumentXMLDocument* myDocument = new tinyxml2::XMLDocument();//載入檔案myDocument->LoadFile(file_path);
//獲得根元素tinyxml2::XMLElement* rootElement = myDocument->RootElement();//第一個子元素XMLElement* studentElement = rootElement->FirshChildElement();//如果studentElement不為空一直循環while(studentElement){ //studentElement的第一個子元素 XMLElement* element = studentElement->FirshChildElement(); while(element){ //獲得元素內容 log("信息:%s",element->GetText()); //下一個兄弟元素 element = element->NextSiblingElement(); } //下一個兄弟元素 studentElement = studentElement->NextSiblingElement();}