1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android json字符串转成json对象_C++ 两行代码实现json与类对象互转

android json字符串转成json对象_C++ 两行代码实现json与类对象互转

时间:2020-06-16 15:29:08

相关推荐

android json字符串转成json对象_C++ 两行代码实现json与类对象互转

背景与需求

之前写C#的时候,解析json字符串一般使用的是开源的类库Newtonsoft.Json,方法十分简洁,比如:

class

一行代码就能将json字符串转为相应的类对象。

最近写C++需要处理一下json数据,于是上github找了很多很强大的开源库,像jsoncpp、rapidjson、json,基本上都满足了开发需求,但想要做成像写C#那样子就要做二次开发。于是有了自己写一个简单的json转类 | 结构体的工具的想法。

需求如下:

只有头文件,方便使用最多三行代码解决转换支持类 | 结构体 与 json的相互转换支持多种基本数据类型,如int、float、string、bool等支持STL基本类型,如vector、list、map<string,T>等支持嵌套关系支持成员重命名,比方说json中的关键字是name,成员命名可写成Name或其他。

最终使用的样例代码

class

实现方法

因为刚好rapidjson只需要头文件就可以使用,所以选择了rapidjson作为基础库,进行二次开发。

基础类型的转换

作为最底层的接口,只需要进行一个赋值的操作即可,后续如果想要增加一些其他类型支持,添加起来也比较方便。

static

类成员注册

这里使用宏定义方式 + 可变参数模板的方式来实现,即可依次对注册的成员进行赋值

template

自定义类的转换

自定义类由于并不清楚外界使用时,是否有按规定添加好成员注册接口,所以这里采用enable_if的方式来尝试调用,编译的时候也就不会报错。

template

外部调用接口

/**

最核心的部分也就上面的几个模块,其他的都是一些琐碎的增加类型支持等操作。

学习与引用

腾讯json解析库:Tencent/rapidjson杨昕: C++ 轻量级对象JSON序列化实现

备注

工程已经放在Github,名字为AIGCJson,有什么建议或者想法的,欢迎提出issue或者pull request

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。