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


    开源库地址: https://github.com/bk192077/struct_mapping.git

    支持结构体,std::strng, std::vcetor, std::list, std::map, std::multimap等类型

    注意:需要std c++17 及以上版本支持

    测试程序:

    1. #include "struct_mapping/struct_mapping.h"
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. struct Point
    9. {
    10. Point()
    11. {
    12. struct_mapping::reg(&Point::x, "x");
    13. struct_mapping::reg(&Point::y, "y");
    14. struct_mapping::reg(&Point::z, "z");
    15. }
    16. double x = 0.1;
    17. double y = 0.2;
    18. double z = 0.3;
    19. };
    20. struct LL
    21. {
    22. LL()
    23. {
    24. struct_mapping::reg(&LL::str, "str");
    25. struct_mapping::reg(&LL::mlt, "mlt");
    26. }
    27. std::string str = "abc";
    28. std::mapint> mlt = {{"zero", 0}, {"one", 1}, {"two", 2}};
    29. };
    30. struct President
    31. {
    32. President()
    33. {
    34. struct_mapping::reg(&President::name, "name");
    35. struct_mapping::reg(&President::mass, "mass");
    36. struct_mapping::reg(&President::vec, "vec");
    37. struct_mapping::reg(&President::lst, "lst");
    38. struct_mapping::reg(&President::l, "l");
    39. }
    40. std::string name="xiaoli-feidao";
    41. double mass=123.4;
    42. std::vector<int> vec={1,2,3,4,5};
    43. std::list lst={"abc","def"};
    44. LL l;
    45. };
    46. struct USA
    47. {
    48. USA()
    49. {
    50. struct_mapping::reg(&USA::president, "president");
    51. }
    52. President president;
    53. };
    54. int main()
    55. {
    56. USA u;
    57. std::ostringstream out;
    58. struct_mapping::map_struct_to_json(u, out, " ");//something out stream directly
    59. std::cout << std::endl;
    60. #if 0
    61. std::cout << out.str() << std::endl;
    62. #endif
    63. u.president.name = "JACK-LEE";
    64. u.president.mass = 76.5;
    65. u.president.lst.push_back("Zara");
    66. u.president.l.str="Scientific Persons";
    67. u.president.l.mlt["aaa"] = -2;
    68. u.president.l.mlt["bbb"] = -1;
    69. struct_mapping::map_struct_to_json(u, out, " ");
    70. std::cout << out.str() << std::endl;
    71. #if 0
    72. LL AB;
    73. AB.str = "Scientific Persons";
    74. AB.mlt["aaa"] = -2;
    75. AB.mlt["bbb"] = -1;
    76. struct_mapping::map_struct_to_json(AB, out, " ");
    77. std::cout << std::endl << out.str() << std::endl;
    78. #endif
    79. }

    构建指令: 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
       }
      }
     }
    }
     

  • 相关阅读:
    重磅首发!PaddleTS飞桨时序建模算法库,预测性维护、智慧能耗分析等一网打尽
    【Android面试八股文】Kotlin内置标准函数apply的原理是什么?
    AI驱动全年业绩超预期!百度2023年营收1345.98亿元,净利润大涨39%
    重生之 SpringBoot3 入门保姆级学习(19、场景整合 CentOS7 Docker 的安装)
    基于nodejs的阿里云DDNS服务,支持多网卡绑定
    大数据之LibrA数据库系统告警处理(ALM-12033 慢盘故障)
    Supabase 自托管部署实践
    vue3 框架学习概念笔记
    Milvus向量数据库:处理和分析大规模向量数据
    防暑降温
  • 原文地址:https://blog.csdn.net/joshua0137/article/details/133173994