当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 172872提问 提问时间:2023-09-23 04:12:10阅读次数: 72

最佳答案 问答题库728位专家为你答疑解惑

开源库地址: 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 directlystd::cout << std::endl;#if 0std::cout << out.str() << std::endl;
#endifu.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
   }
  }
 }
}
 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"简易好用的C++结构体与JSON文本相互转换开源库":http://eshow365.cn/6-11879-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!