# Json序列化 **Repository Path**: qin_git/json-serialization ## Basic Information - **Project Name**: Json序列化 - **Description**: C++基于nlohmann/json库实现的json数据自动序列化为C++对象 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-12-07 - **Last Updated**: 2024-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: JSON ## README # Json序列化 #### 介绍 C++基于nlohmann/json库实现的json数据自动序列化为C++对象 #### 软件架构 C++作为一个静态语言,在没有反射和注解等支持的下,完成Json到对象的自动序列化工作 自测可用,没有做复杂测试工作,在生产项目中请自测使用,不保证稳定性,也欢迎大家一起完成稳定工作测试 需要C++11以上版本的支持 #### 安装教程 1. git clone https://gitee.com/qin_git/json-serialization.git 2. 将代码中的Json.hpp和JsonSerialize头文件放在项目中使用 #### 使用说明 1. 本代码是基于nlohmann/json开源json解析类完成json数据到对象的自动序列化工作,解决序列化时需要构建类并实现toJson()、fromJson()等繁琐工作 2. 所有功能实现基于JsonSerialize类,序列化对象类都要继承于该类并通过提供的四个带参宏函数完成类的定义 3. 在定义序列化类的时候需要注意,类中的成员名要于接受json数据的key名称相同才能完成自动序列化工作 4. 代码分析: `JSERIALIZE_BEGIN(类名) : 总是定义在序列化的类的开始,会为类提供一个构造器,重载=的函数和拷贝构造函数 ` `JSERIALIZE_DEF_BASICTYPE(类名,数据类型,名称) : 定义基本数据类型成员变量,数据类型总是为char\short\int\long\bool\string等基本数据类型,名称要于接受json数据中的key相同` `JSERIALIZE_DEF_OBJECTTYPE(类名,对象数据类型,名称) :定义对象数据类型,数据类型总是为某一个继承于JsonSerialize类的对象类型,用于接收json数据总的对象类型数据,该对象类型需要手动完成定义` `JSERIALIZE_DEF_BASICLIST(类名,基本数据类型,名称) : 定义基本数据类型的集合成员,用于接收json中的基本数据类型组成的数组,数据类型总是为char\short\int\long\bool\string等基本数据类型,会为类生成一个vectory成员变量` `JSERIALIZE_DEF_OBJECTLIST(类名,对象数据类型,名称) : 定义对象数据类型集合成员,用于接收json中的对象形成的数组,数据类型总是为某一个继承于JsonSerialize类的对象类型,会为类生成一个vectory<对象>的成员变量` `JSERIALIZE_END(类名) : 总是定义在所有定义的最后,会为类生成两个重载函数:Serialize(json)序列化和json DeSerialize()反序列化` #### 测试代码 详见main.cpp代码: 提供两个测试代码: 代码1:定义Test类完成简单json数据的序列化和反序列化工作{"type":"fruit", "name":"apple","age":10,"array":[100,200,300]} 代码2:定义Person、Son、Object三个类完成复杂json数据序列化和反序列化工作{"id":20,"name":"zhangsan","son":{"id":50,"name":"lisi"},"objectList":[{"indexID": "1","testData": "95100000000000991"},{"indexID": "2","testData": "95100000000000992"}]} #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)