简易好用的C++结构体与JSON文本相互转换开源库

人生乱弹 2年前 (2023) admin
13 0

开源库地址: https://github.com/bk192077/struct_mapping.git
支持结构体,std::strng, std::vcetor, std::list, std::map, std::multimap等类型
注意:需要std c++17 及以上版本支持
测试程序:
#include "struct_mapping/struct_mapping.h"

#include <list>
#include <iostream>
#include <map>
#include <sstream>
#include <string>
#include <vector>

struct Point
{
Point()
{
struct_mapping::reg(&Point::x, "x");
struct_mapping::reg(&Point::y, "y");
struct_mapping::reg(&Point::z, "z");

}

double x = 0.1;
double y = 0.2;
double z = 0.3;
};

struct LL
{
LL()
{
struct_mapping::reg(&LL::str, "str");
struct_mapping::reg(&LL::mlt, "mlt");
}
std::string str = "abc";
std::map<std::string ,int> mlt = {{"zero", 0}, {"one", 1}, {"two", 2}};
};

struct President
{
President()
{
struct_mapping::reg(&President::name, "name");
struct_mapping::reg(&President::mass, "mass");
struct_mapping::reg(&President::vec, "vec");
struct_mapping::reg(&President::lst, "lst");
struct_mapping::reg(&President::l, "l");
}
std::string name="xiaoli-feidao";
double mass=123.4;
std::vector<int> vec={1,2,3,4,5};
std::list<std::string> lst={"abc","def"};
LL l;
};

struct USA
{
USA()
{
struct_mapping::reg(&USA::president, "president");
}

President president;
};

int main()
{
USA u;
std::ostringstream out;
struct_mapping::map_struct_to_json(u, out, " ");//something out stream directly
std::cout << std::endl;

#if 0
std::cout << out.str() << std::endl;
#endif

u.president.name = "JACK-LEE";
u.president.mass = 76.5;
u.president.lst.push_back("Zara");
u.president.l.str="Scientific Persons";
u.president.l.mlt["aaa"] = -2;
u.president.l.mlt["bbb"] = -1;
struct_mapping::map_struct_to_json(u, out, " ");
std::cout << out.str() << std::endl;

#if 0
LL AB;
AB.str = "Scientific Persons";
AB.mlt["aaa"] = -2;
AB.mlt["bbb"] = -1;
struct_mapping::map_struct_to_json(AB, out, " ");
std::cout << std::endl << out.str() << std::endl;
#endif
}

构建指令: g++ ./struct-lys.cpp -std=c++17 -o sl.out -I /home/lys/usr/local/include
运行结果

{
 "president": {
  "name": "xiaoli-feidao",
  "mass": 123.4,
  "vec": [
   1,
   2,
   3,
   4,
   5
  ],
  "lst": [
   "abc",
   "def"
  ],
  "l": {
   "str": "abc",
   "mlt": {
    "one": 1,
    "two": 2,
    "zero": 0
   }
  }
 }
}{
 "president": {
  "name": "JACK-LEE",
  "mass": 76.5,
  "vec": [
   1,
   2,
   3,
   4,
   5
  ],
  "lst": [
   "abc",
   "def",
   "Zara"
  ],
  "l": {
   "str": "Scientific Persons",
   "mlt": {
    "aaa": -2,
    "bbb": -1,
    "one": 1,
    "two": 2,
    "zero": 0
   }
  }
 }
}
 

文章来源

版权声明:admin 发表于 2023年9月24日 am11:50。
转载请注明:简易好用的C++结构体与JSON文本相互转换开源库 | 银库

相关文章

本站主题由 OneNav 一为主题强力驱动