User Tools

Site Tools


programming:cpp:json

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
programming:cpp:json [2022/03/29 12:40]
odagawa created
programming:cpp:json [2022/04/11 14:23] (current)
odagawa
Line 1: Line 1:
 =====JSON===== =====JSON=====
  
-JSON は JavaScript Object Notation 記法のこと.+JSON は JavaScript Object Notation 記法のこと.\\
 人間にも機械にもそれなりの可読性を持ったファイル形式である. 人間にも機械にもそれなりの可読性を持ったファイル形式である.
  
Line 7: Line 7:
  
   * [[https://github.com/kazuho/picojson|GitHub]] から picojson.h を持ってくる   * [[https://github.com/kazuho/picojson|GitHub]] から picojson.h を持ってくる
-  * ヘッダオンリーライブラリなので適当なところに picojson.h +  * ヘッダオンリーライブラリなので適当なところに picojson.h を置けば使える 
 +  * sample code 
 +<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 
 +  } 
 +
 +</code>
  
 +<code cpp TestPicojson.cpp>
 +#include "picojson.h"
 +#include <boost/filesystem.hpp>
 +#include <fstream>
  
 +namespace fs = boost::filesystem;
 +
 +void ReadJsonData(t2l_param &param, 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<char >(ifs)), std::istreambuf_iterator<char >());
 +  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 >();
 +  picojson::object &connect_param_angle = all["connect_param_angle"].get<picojson::object >();
 +  picojson::object &connect_param_position = all["connect_param_position"].get<picojson::object >();
 +
 +  param.intercept_ax = connect_param_angle["intercept_x"].get<double>();
 +  param.intercept_ay = connect_param_angle["intercept_y"].get<double>();
 +  param.intercept_ar = connect_param_angle["intercept_r"].get<double>();
 +  param.intercept_al = connect_param_angle["intercept_l"].get<double>();
 +  param.slope_ax = connect_param_angle["slope_x"].get<double>();
 +  param.slope_ay = connect_param_angle["slope_y"].get<double>();
 +  param.slope_ar = connect_param_angle["slope_r"].get<double>();
 +  param.slope_al = connect_param_angle["slope_l"].get<double>();
 +  param.slope2_ax = connect_param_angle["slope2_x"].get<double>();
 +  param.slope2_ay = connect_param_angle["slope2_y"].get<double>();
 +  param.slope2_ar = connect_param_angle["slope2_r"].get<double>();
 +  param.slope2_al = connect_param_angle["slope2_l"].get<double>();
 +  
 +  param.intercept_px = connect_param_position["intercept_x"].get<double>();
 +  param.intercept_py = connect_param_position["intercept_y"].get<double>();
 +  param.intercept_pr = connect_param_position["intercept_r"].get<double>();
 +  param.intercept_pl = connect_param_position["intercept_l"].get<double>();
 +  param.slope_px = connect_param_position["slope_x"].get<double>();
 +  param.slope_py = connect_param_position["slope_y"].get<double>();
 +  param.slope_pr = connect_param_position["slope_r"].get<double>();
 +  param.slope_pl = connect_param_position["slope_l"].get<double>();
 +  param.slope2_px = connect_param_position["slope2_x"].get<double>();
 +  param.slope2_py = connect_param_position["slope2_y"].get<double>();
 +  param.slope2_pr = connect_param_position["slope2_r"].get<double>();
 +  param.slope2_pl = connect_param_position["slope2_l"].get<double>();
 +
 +}
 +</code>
programming/cpp/json.1648557630.txt.gz · Last modified: 2022/03/29 12:40 by odagawa