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檔案的解釋如下 第三列為預設值。注意列是由空白分開的,所以如果預設值...