C rapidjson使用示例

2021-09-02 19:59:28 字數 4782 閱讀 5477

rapidjson使用示例

如果想深入學習rapidjson工具,

官方文件肯定是必須看一看的

本示例所用環境

引擎版本:cocos2d-x 3.10

示例**與注釋

說明:我是直接使用原本引擎建立了新的cocos2dx工程,然後略微修改了helloworldscene.cpp中的**。為了方便,使用rapidjson生成json串,儲存json串到檔案,從檔案讀取json串,使用rapidjson解析json串的過程,全部寫到了initself()函式中。

helloworldscene.h檔案內容

#include

"cocos2d.h"

class

helloworld

:public cocos2d::layer

helloworldscene.cpp檔案的內容

#include

"heeloworldscene.h"

#include

"json/rapidjson.h"

#include

"json/document.h"

#include

"json/filestream.h"

#include

"json/stringbuffer.h"

#include

"json/writer.h"

using_ns_cc;

scene* helloworld::

createscene()

bool helloworld::

init()

else

}// 重點

void helloworld::

initself()

// "book":[,],

// "healthy":true,

// }

// 生成json串

rapidjson::document jsondoc;

// 生成乙個dom元素的document

rapidjson::document::allocatortype &allocator = jsondoc.

getallocator()

;// 獲取分配器

jsondoc.

setobject()

;// 將當前的document設定為乙個object,也就是說整個document是乙個object型別的dom元素

// 新增屬性

jsondoc.

addmember

("name"

,"king"

,allocator)

;// 新增字串值

jsondoc.

addmember

("age",20

,allocator)

;// 新增int型別值

// 生成array

rapidjso::value letterarray

(rapidjson::karraytype)

;// 建立乙個array型別的元素

letterarray.

pushback

("a"

,allocator)

; letterarray.

pushback

("b"

,allocator)

; letterarray.

pushback

("c"

,allocator)

; jsondoc.

addmember

("letter"

,letterarray,allocator)

;// 生成乙個object

rapidjson::value locationobj

(rapidjson::kobjecttype)

;// 建立乙個object型別的元素

locationobj.

addmember

("province"

,"shannxi"

,allocator)

; locationobj.

addmember

("city"

,"xian"

,allocator)

; locationobj.

addmember

("number",16

,allocator)

; jsondoc.

addmember

("location"

,locationobj,allocator)

;// 生成乙個object陣列

rapidjson::value bookarray

(rapidjson::karraytype)

;// 定義陣列(存放object)

rapidjson::value book1

(rapidjson::kobjecttype)

;// 生成book1

book1.

addmember

("name"

,"book1"

,allocator)

; book1.

addmember

("isbn"

,"123"

,allocator)

; bookarray.

pushback

(book1,allocator)

; rapidjson::value book2

(rapidjson::kobjecttype)

;// 生成book2

book2.

addmember

("name"

,"book2"

,allocator)

; book2.

addmember

("isbn"

,"456"

,allocator)

; bookarray.

pushback

(book2,allocator)

; jsondoc.

addmember

("book"

,bookarray,allocator)

;// 新增屬性

jsondoc.

addmember

("healthy"

,true

,allocator)

;// 新增bool型別值

// 生成字串

rapidjson::stringbuffer buffer;

rapidjson::write

writer

(buffer)

; jsondoc.

accept

(writer)

; std::string strjson = buffer.

getstring()

;log

("---生成的json:\n%s"

,strjson.

c_str()

);// 寫到檔案

std::string strpath = fileutils::

getinstance()

->

getwritablepath()

+"jsonfile.txt"

; file* fp =

fopen

(strpath.

c_str()

,"wb");

if(fp)

fputs

(buffer.

getstring()

,fp)

;fclose

(fp)

;檔案內容

//,"book":[,],"healthy":true}

log(

"---讀取json內容:"

) rapidjson::document newdoc;

fp =

fopen

(strpath.

c_str()

,"rb");

if(fp)

//判斷解析從流中讀取的字串是否有錯誤

if(newdoc.

hasparseerror()

)else

else

if(newdoc.

hasmember

("age"))

else

if(newdoc.

hasmember

("letter"))

}else

}else

if(newdoc.

hasmember

("location"))

else

if(location.

hasmember

("city"))

else

if(location.

hasmember

("number"))

else

}else

}else

//book是乙個包含了2個object的array。按照上面的步驟來取值就行

if(newdoc.

hasmember

("book"))

else

}else}}

else

}else

if(newdoc.

hasmember

("healthy"))

else

}else

}}

C rapidjson庫解析json串

我們有了乙個string型別的字串,字串是乙個json串,使用c 的rapidjson庫解析它 按照你的需求自行更改 我這裡只是個例子 string內容為 include include include rapidjson document.h include rapidjson writer.h ...

SharpZipLib使用示例

sharpziplib使用示例 zipinputstream gzipinputstream用於解壓縮deflate gzip格式流,zipoutputstream gzipoutputstream用於壓縮deflate gzip格式流。streamutil類包含了幾個stream處理輔助方法 co...

ConfigEngine使用示例

configengine使用示例 簡要過程如下 步驟3 編寫你的配置定義檔案 raw.f。步驟4 呼叫confengine裡的genconf.py編譯raw.f,生成raw.h.第一步,定義需要的配置項,儲存在raw.f raw.f檔案的解釋如下 第三列為預設值。注意列是由空白分開的,所以如果預設值...