做工程時需要使用c++與json檔案進行資料互動,且需要處理巢狀陣列,選用了rapidjson作為解析器。
rapidjson的api見其官方說明文件:
在標頭檔案中新建rapidjson::document作為全域性document,新建vector作為全域性vector備用。
rapidjson::document jsondocument;
vector< vector> line_v;
一、讀取json檔案資料於document
void read_json_file(const std::string file_path)
if(!jsondocument.isobject())
}
二、將document資料寫入json檔案中
void write_json_file(const std::string file_path)
三、讀取json檔案中名為"virtualwall"的menber巢狀陣列資料資料(格式:[[a1,b1,c1,d1],[a2,b2,c2,d2],...])
void load_json_data(const std::string file_path)
else
line_v.push_back(line_v_t);
line_v_t.clear();
}} }
參考陣列格式rapidjson::karraytype的value,使用object形式的value可以解析json中巢狀字典的資料。
四、向json檔案中key值為"virtualwall"的value新增元素[ax,bx,cx,dx]
void add_data(const std::string file_path,vectormsg)
line_v.push_back(line_v_t); //update the vector
jsondocument["virtualwall"].pushback(l_data_temp,jsondocument.getallocator());
write_json_file(json_file_path);
}
五、清空json檔案中key值為"virtualwall"的資料
void clear_data()
六、刪除"virtualwall"中巢狀陣列中的指定元素[ax,bx,cx,dx]
void delete_data(const vectormsg)
read_json_file(json_file_path);
jsondocument["virtualwall"].setarray();
rapidjson::value l_data_temp(kobjecttype);
l_data_temp.setarray();
for(int i = 0; i < line_v.size(); i++)
jsondocument["virtualwall"].pushback(l_data_temp,jsondocument.getallocator());
l_data_temp.setarray();
} write_json_file(json_file_path);
}bool data_compare(const vectora, const vectorb)
if( a.size() == i )
return true;
else
return false;
}
rapidjson使用樣例
rapidjson預設支援的字元格式是utf 8的,一般中間介面是json檔案的話儲存為utf 8比較通用一些。如果是unicode的需要轉換。但從原始碼中的ch型別看,應該是支援泛型的,具體在用到了可以仔細研究一下。這篇文件中有json解析相關庫的效能比較,rapidjson還是各方面均衡比較突出...
C 使用RapidJSON庫處理json檔案
win8系統,ide為visual studio 2013 匯入標頭檔案,設定標頭檔案的包含目錄,選擇專案 屬性。include include 檔案讀寫 include include include using namespace rapidjson using rapidjson docume...
C C 學習筆記 rapidjson的簡單使用
answer rapidjson是乙個 c 的 json 解析器及生成器 rapidjson不依賴第三方庫,而且只包含標頭檔案,使用方便簡單。有的時候,需要的json格式是十分複雜的,如下所示 value是乙個陣列且裡面每個元素又是乙個json格式,std string build json msg...