1、先編寫乙個示例json字串,用以研究讀取json字串的介面:
json的語法是:資料在鍵值對中,
資料由逗號分隔,
花括號儲存物件,
方括號儲存陣列
我打算編寫十個角色,分別有序號,名字,攻擊,防禦,hp幾個屬性。根據語法要求應該編寫成如下字串:
,,,,,,,,,] }
於是建立了這樣的字串(引號需要轉義):
std::string str =",,,,,,,,,] }";
2、用如下**解析,如果有錯誤的資訊,輸出錯誤資訊:
rapidjson::document d;
d.parse<0>(str.c_str());
if (d.hasparseerror()) //列印解析錯誤
3、用如下**示例,取出role這個陣列,並且查詢裡面的角色屬性,賦值給已經編寫好的變數(就是能用了)
以下**供參考:
rapidjson::value& _array = d["role"];
if(_array.isarray())
if(arraydoc.hasmember("att"))
if(arraydoc.hasmember("def"))
if(arraydoc.hasmember("hp"))
if(arraydoc.hasmember("name"))
m_roles.pushback(new rolemodel(num,name.c_str(),att,def,hp));
}}
4、製作json檔案
把上面的json字串存在文字編輯器裡,選製作純文字,儲存的時候字尾寫.json,編碼方式選utf8,然後把檔案放到resource資料夾下,加入到工程中
5、用下面建立fileutils例項的方法就可以直接讀到對應的json檔案了
std::string str =fileutils::sharedfileutils()->getstringfromfile("myhero.json");
6、所以這段**整體來看是這樣的:
std::string str =fileutils::sharedfileutils()->getstringfromfile("myhero.json");
rapidjson::document d;
d.parse<0>(str.c_str());
if (d.hasparseerror()) //列印解析錯誤
rapidjson::value& _array = d["role"];
if(_array.isarray())
if(arraydoc.hasmember("att"))
if(arraydoc.hasmember("def"))
if(arraydoc.hasmember("hp"))
if(arraydoc.hasmember("name"))
m_roles.pushback(new rolemodel(num,name.c_str(),att,def,hp));
}}
7、然後,再摘抄乙個網上的在**中寫json檔案方式:
rapidjson::document document;
document.setobject();
rapidjson::document::allocatortype& allocator = document.getallocator();
rapidjson::value array(rapidjson::karraytype);
rapidjson::value object(rapidjson::kobjecttype);
object.addmember("int", 1, allocator);
object.addmember("double", 1.0, allocator);
object.addmember("bool", true, allocator);
object.addmember("hello", "你好", allocator);
array.pushback(object, allocator);
document.addmember("json", "json string", allocator);
document.addmember("array", array, allocator);
stringbuffer buffer;
rapidjson::writerwriter(buffer);
document.accept(writer);
auto path = fileutils::getinstance()->getwritablepath();
file* file = fopen(path.c_str(), "wb");
if(file)
cclog("%s",buffer.getstring());
C 中引用成員的初始化
今天俺看到了乙個比較疑惑的地方,公司的一段c code中有乙個類中帶了乙個引用物件,如下所示 class class1 public private object element 然後對於這個element的初始化方法我從來沒見過,mark一下,因為我c 還是初學,所以這種問題還是了解一下,應該是某...
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...