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

2021-12-27 15:46:35 +08:00
 yaron

之前依赖 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__); \
    }                                                                                    
961 次点击
所在节点    问与答
2 条回复
wtfdsy
2021-12-27 17:51:44 +08:00
试试 https://github.com/nlohmann/json 这个?
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE 这个宏可以在结构体外部用
yaron
2021-12-28 09:10:36 +08:00
@wtfdsy 谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824707

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX