C++编写配置文件解析模块(基于JSON格式)
- 1、环境准备
- 2、JSON-CPP简单使用
-
- 2.1、将json格式字符串转换为Json::Value
- 2.2、将Json::Value转换为json格式字符串
- 3、序列化和反序列化的实现
-
- 3.1、通用序列化转换模板
- 3.2、序列化反序列化通用代码块宏定义
- 3.3、实现std::vector和json格式字符串的转换
- 3.4、实现std::map和json格式字符串的转换
- 3.5、其他类型数据的转换
- 4、配置器类的设计
-
- 4.1、ConfigBase – 配置基类
- 4.2、Config – 配置类
- 4.3、ConfigManager – 配置器管理类
- 5、总结
1、环境准备
2、JSON-CPP简单使用
由于配置文件的格式是json的,所以有必要了解一下json格式, 上教程很多,这里就不赘述了。代码中使用的是JSON-CPP来解析json格式的,使用的版本比较新,具体的版本忘记了,可能使用起来会和老版本的不太一样(因为代码里面有宏提示某部分代码已经不建议使用了),所以下面举两个简单的例子说明JSON-CPP使用方法
2.1、将json格式字符串转换为Json::Value
2.2、将Json::Value转换为json格式字符串
3、序列化和反序列化的实现
3.1、通用序列化转换模板
可以看到下面代码使用了boost的lexical_cast来实现一些基本类型的转换(比如std::string转int、float),这也就是为什么之前搭建环境的时候要安装boost依赖的原因了,这里会使用到
3.2、序列化反序列化通用代码块宏定义
如下所示,将每个序列化和反序列化会使用到的通用代码用宏封装了起来,实现的功能也就是 std::string->Json::Value 和 Json::Value->std::string
3.3、实现std::vector和json格式字符串的转换
序列化,可以看到就是将std::vector的数据一个一个压进去Json::Value(数组类型)里面,然后将其转换为字符串输出
反序列化,可以看到就是将json格式字符串转为Json::Value(数组类型),然后将其一个一个压进去std::vector里,最后输出
3.4、实现std::map和json格式字符串的转换
序列化,可以看到就是将std::map的数据一个一个压进去Json::Value(对象类型)里面,然后将其转换为字符串输出
反序列化,可以看到就是将json格式字符串转为Json::Value(对象类型),然后将其一个一个压进去std::map里,最后输出
3.5、其他类型数据的转换
代码中还实现了其他stl容器与json字符串的转换,这里就不赘述了,与上面的实现差不多。从上面的例子可以看出,只要实现了自定义数据结构的序列化和反序列化的,就能支持自定义配置文件格式,具体大家可以去看一下代码中日志配置文件、tcp服务配置文件、数据库配置文件的序列化和反序列化、数据结构定义以及配置文件的格式。接下来以数据库配置文件为例简单分析一下
配置文件格式
自定义配置类
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!