• 简易好用的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
       }
      }
     }
    }
     

  • 相关阅读:
    2、模块传参和依赖
    Ant Design中使用css切换问题记录
    理解傅里叶变换
    Lintcode 1115 · Average of Levels in Binary Tree (BFS/DFS 经典题)
    数学小抄: 概率角度推导Kalman Filter
    AngularJS渲染完成事件捕获
    [ 隧道技术 ] 反弹shell的集中常见方式(一)nc反弹shell
    SIT1050ISO 数字隔离接口芯片替代 ISO1050DUBR 电容隔离的CAN转发器
    Flask 学习-51.Flask-RESTX 生成 Swagger 文档 详细教程
    为什么要学习----------[澳大利亚]安德鲁·马修斯
  • 原文地址:https://blog.csdn.net/joshua0137/article/details/133173994