=====JSON===== JSON は JavaScript Object Notation 記法のこと.\\ 人間にも機械にもそれなりの可読性を持ったファイル形式である. JSON ファイルを C++ で読み込むにはいくつかの方法があるが,ここでは picojson を紹介する. * [[https://github.com/kazuho/picojson|GitHub]] から picojson.h を持ってくる * ヘッダオンリーライブラリなので適当なところに picojson.h を置けば使える * sample code { "connect_param_angle":{ "slope2_x" :0.06, "slope_x" :0.02, "intercept_x":0.05, "slope2_y":0.06, "slope_y":0.02, "intercept_y":0.05, "slope2_r" :0.06, "slope_r" :0.02, "intercept_r":0.05, "slope2_l":0.01, "slope_l":0.03, "intercept_l":0.05 }, "connect_param_position":{ "slope2_x" :0, "slope_x" :100, "intercept_x":30, "slope2_y" :0, "slope_y":100, "intercept_y":30, "slope2_r" :0, "slope_r" :10, "intercept_r":20, "slope2_l" :1, "slope_l":2, "intercept_l":20 } } #include "picojson.h" #include #include namespace fs = boost::filesystem; void ReadJsonData(t2l_param ¶m, const std::string json_file_path) { if ( !fs::exists(json_file_path) ) throw std::runtime_error("File : " + json_file_path + " not found"); std::ifstream ifs(json_file_path); const std::string json((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); ifs.close(); picojson::value v; const std::string err = picojson::parse(v, json); if ( !err.empty() ) throw std::runtime_error("JSON parse error : " + err); picojson::object &all = v.get(); picojson::object &connect_param_angle = all["connect_param_angle"].get(); picojson::object &connect_param_position = all["connect_param_position"].get(); param.intercept_ax = connect_param_angle["intercept_x"].get(); param.intercept_ay = connect_param_angle["intercept_y"].get(); param.intercept_ar = connect_param_angle["intercept_r"].get(); param.intercept_al = connect_param_angle["intercept_l"].get(); param.slope_ax = connect_param_angle["slope_x"].get(); param.slope_ay = connect_param_angle["slope_y"].get(); param.slope_ar = connect_param_angle["slope_r"].get(); param.slope_al = connect_param_angle["slope_l"].get(); param.slope2_ax = connect_param_angle["slope2_x"].get(); param.slope2_ay = connect_param_angle["slope2_y"].get(); param.slope2_ar = connect_param_angle["slope2_r"].get(); param.slope2_al = connect_param_angle["slope2_l"].get(); param.intercept_px = connect_param_position["intercept_x"].get(); param.intercept_py = connect_param_position["intercept_y"].get(); param.intercept_pr = connect_param_position["intercept_r"].get(); param.intercept_pl = connect_param_position["intercept_l"].get(); param.slope_px = connect_param_position["slope_x"].get(); param.slope_py = connect_param_position["slope_y"].get(); param.slope_pr = connect_param_position["slope_r"].get(); param.slope_pl = connect_param_position["slope_l"].get(); param.slope2_px = connect_param_position["slope2_x"].get(); param.slope2_py = connect_param_position["slope2_y"].get(); param.slope2_pr = connect_param_position["slope2_r"].get(); param.slope2_pl = connect_param_position["slope2_l"].get(); }