首頁 >常見問題 >什麼是json資料解析

什麼是json資料解析

(*-*)浩
(*-*)浩原創
2019-05-20 09:36:276850瀏覽

json資料解析的方法:先建立JSON檔案;然後在類別中包含「document.h」和「cocos-ext.h」頭檔;接著透過FileUtils取得JSON檔案路徑,並透過Document對象解析JSON資料;最後取得不同類型的資料值即可。

什麼是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>Document;

typedef GenericValue>Value;

#Value重載了數組下標運算子[ ],所以我們可以使用該運算符,根據JSON檔案中的key取得value。

const GenericValue & operator [] (const Ch* name) const{

const_cast(*this)[name];}

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:bi是什麼?下一篇:bi是什麼?