=====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();
}