json資料解析的方法:先建立JSON檔案;然後在類別中包含「document.h」和「cocos-ext.h」頭檔;接著透過FileUtils取得JSON檔案路徑,並透過Document對象解析JSON資料;最後取得不同類型的資料值即可。
在網路通訊過程中需要傳輸數據,JOSN數據解析的過程為:首先建立JSON文件,然後在類別中包含document.h和cocos- ext.h頭文件,接著透過FileUtils取得JSON文件路徑,並透過Document物件解析JSON數據,最終獲得不同類型的數據值。
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式。它使得人們可以輕鬆地進行閱讀和編寫,同時也方便了機器進行解析和生成。 JSON採用完全獨立於程式語言的文字格式,但也使用了類C語言的習慣(包括C、C 、C#、Java、JavaScript、Perl和Python等),這些特性使得JSON成為理想的資料交換語言。
JSON資料解析
例如在Cocos2d.x根目錄的external/json目錄下面,是JSON處理的相關類,這裡主要使用document.h這個頭文件,該文件中的兩個核心類別是GenericValue和GenericDocument,GenericDocument繼承GeneficValue。使用GenericDocument用來處理文檔內容,如解析文檔內容;而GenericValue主要處理值內容,即文檔內部的key-value鍵值對內容,可以根據key取得value。 GenericValue和GenericDocument都被重新進行了型別定義。所以可以使用類型定義後的名稱。
ypedef GenericDocument
typedef GenericValue
#Value重載了數組下標運算子[ ],所以我們可以使用該運算符,根據JSON檔案中的key取得value。
const GenericValue & operator [] (const Ch* name) const{
const_cast
Value也提供了一組GetXXX方法,根據不同的資料類型,獲得對應的值。
透過一個實例來示範如何解析JSON數據,操作步驟如下:
建立JSON檔案
在專案的classes資料夾下建立JSON文件,內容如下:
{"pets":["dog","cat"],"stuInfo":{ "stuAge":23,"stuName":"rose","birthday":"1990-01-12"},"username","tom","other":[true,30]}
在該文件中,pets是一個數組,表示寵物,有兩個值dog和pet;stuInfo是一個學生資訊;後面是一個usename ;最後還有一個other數組。
在類別中包含document.h和cocos-ext.h頭檔
#include "cocos-ext.h" #include "json/document.h"
透過FileUtils取得JSON檔案路徑
#const char* file_path = FileUtils::getInstance()->fullPathForFilename("hello.json").c_str(); log("文件路径path=%s",file_path);
透過Document物件解析JOSN資料
//文档对象 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());
取得不同類型的資料值
透過陣列下標運算子[],根據key取得Value,並使用Value的GetXXX方法獲得不同類型的資料值。
//获取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()); } }
以上是什麼是json資料解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!