V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yaron
V2EX  ›  问与答

请教大佬一个 C++ 结构体与 json 转换的问题

  •  
  •   yaron · 2021-12-27 15:46:35 +08:00 · 858 次点击
    这是一个创建于 844 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前依赖 rapidjson 写过结构体转 json 的工具,使用的方法主要是手动往结构体里加可变参数的宏,然后使用__VA_ARGS__进行成员遍历与赋值,具体的宏如下代码。

    但这会破坏原有的结构体,就想能不能在结构体外面进行注册。想问下有没有什么好的办法?

    /******************************************************
     * Register class or struct members
     * eg:
     * struct Test
     * {
     *      string A;
     *      string B;
     *      AIGC_JSON_HELPER(A, B)
     * };         
     ******************************************************/
    #define AIGC_JSON_HELPER(...)                                                            \
        std::map<std::string, std::string> __aigcDefaultValues;                              \
        bool AIGCJsonToObject(aigc::JsonHelperPrivate &handle,                               \
                              rapidjson::Value &jsonValue,                                   \
                              std::vector<std::string> &names)                               \
        {                                                                                    \
            std::vector<std::string> standardNames = handle.GetMembersNames(#__VA_ARGS__);   \
            if (names.size() <= standardNames.size())                                        \
            {                                                                                \
                for (int i = names.size(); i < (int)standardNames.size(); i++)               \
                    names.push_back(standardNames[i]);                                       \
            }                                                                                \
            return handle.SetMembers(names, 0, jsonValue, __aigcDefaultValues, __VA_ARGS__); \
        }                                                                                    
    
    2 条回复    2021-12-28 09:10:36 +08:00
    wtfdsy
        1
    wtfdsy  
       2021-12-27 17:51:44 +08:00
    试试 https://github.com/nlohmann/json 这个?
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE 这个宏可以在结构体外部用
    yaron
        2
    yaron  
    OP
       2021-12-28 09:10:36 +08:00
    @wtfdsy 谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2579 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:26 · PVG 12:26 · LAX 21:26 · JFK 00:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.