当前位置:   article > 正文

C++使用nlohmann json_includenlojson

includenlojson

最好用的c++ json库是 nlohmann
github 地址:https://github.com/nlohmann/json.git

提示

把变量写成json容易,可是把json变成变量就要复杂一点,不过对于nlohmann一点都不复杂

json是什么

不多说了

怎么使用这个库

编译安装

mkdir build
cd build
cmake ..
make
sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5

头文件

#include "nlohmann/json.hpp"    //实际位置在 /usr/include中,so和a文件也在默认的地方
  • 1

写json

对于基本类型,直接赋值,简单粗暴
对于复杂类型,要自定义函数,使用基本类型来实现
#include "nlohmann/json.hpp"
#include <iostream>
#include <fstream>
#include <eigen3/Eigen/Eigen>

using json = nlohmann::json;

using namespace std;
using namespace Eigen;

int main()
{
	nlohmann::json json;
    Eigen::Vector3d o(3,4,5);
    Eigen::Quaterniond origin_(2, 0, 1, -3);
    json["id"] = id;
    json["map_type"] = type_;
    nlohmann::json json_origin_position;
    json_origin_position["x"] = o.x();
    json_origin_position["y"] = o.y();
    json_origin_position["z"] = o.z();
    nlohmann::json json_origin_rotation;
    json_origin_rotation["w"] = origin_.w();
    json_origin_rotation["x"] = origin_.x();
    json_origin_rotation["y"] = origin_.y();
    json_origin_rotation["z"] = origin_.z();
    nlohmann::json json_origin;
    json_origin["position"] = json_origin_position;
    json_origin["rotation"] = json_origin_rotation;
    json["origin"] = json_origin;
    cout << json.dump(2) << std::endl;
    std::ofstream os("test.json");
    os << json.dump(4) << endl;
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

读json

  1. 使用 json["somename"].get<T>(),如 basictype x = json["somename"].get<basictype>();
  2. 使用 json.at("somename").get_to(variable)
  3. 对于自定义的类型,需要序列化你的class或者struct,即加上序列化方法from_json(const json& json, T& var)
struct hl{
    int id;
};
}
hl  m = json["name"].get<hl>(); //错误
  • 1
  • 2
  • 3
  • 4
  • 5

需要为struct hl加上序列化方法from_json(const json& json, hl* var)
修改上面的struct hl

struct hl{
    int id;
};

void from_json(const json& j, hl& h){
    j.at("id").get_to(h.id);
}
hl  m = json["name"].get<hl>(); //正确
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 对于class定义的类型,可以将上面的 from_json方法改成 friend型,这样就可以访问class的私有变量啦
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/601188
推荐阅读
相关标签
  

闽ICP备14008679号