添加 gtest 作为 git 子模块:
# 1. 将远程 gtest 官方库添加到本地文件夹 Cpp_Json_gtest 中
git submodule add https://github.com/google/googletest.git Cpp_Json/gtest
# 2. 添加完子模块后,可以在当前根目录下看到 .gitmodules 的文件,这就表示子模块添加成功了
# 3. 更新子模块为远程项目的最新版本
git submodule update --remote
可参考cmake中多级CMakeLists.txt调用、CMake 学习笔记
该 JSON 项目主要学习 miloyip 的从 0 开始写一个 json 解析库,学习过程持续更新中(2023/6/13)。
leptjson.h
、leptjson.c
是用来解析 json 文件的实现代码,test.c
是用来测试编写函数的正确性。
该项目大致想法是先按照教程用 C 语言写一遍,然后使用 C++ 对项目进行重构。
- C_Json(2023/6/13~2023/6/25) 表示按照教程编写的 C 语言代码。
- Cpp_Json(2023/6/26~2023/9/3) 表示使用 C++ 重构之前编写的 C 语言代码。
Cpp_Json 将 C_Json 中完成的 C 语言的 Json 库使用 C++ 进行封装与重写,这里主要封装了 5 个类,每个类都使用一个头文件与 .cpp 文件进行实现。解释如下:
- Json 类主要是用提供外部调用的接口,而 JsonValue 是负责实现该接口的(避免内部数据暴露在外)。这里主要是使用一个 std::unique_ptr 的一个指针来实现接口与实现的分离,Json 类调用 JsonValue类的实现,Json 类提供给外部调用接口。
- JsonException 类是将原 c 语言代码中的解析出来的错误信息进行封装,继承
std::runtime_error
来抛出异常信息。 - JsonGenerator 类主要是用来实现 json 字符串的生成的。
- Parse 类是用来解析 json 字符串的。
本项目使用 gtest
来做单元测试,主要参考轻量级Json库 、MiniJson 。
git clone [email protected]:yanfengneng/My_Json.git
cd Cpp_Json
mkdir build && cd build
cmake .. && make
UnitTest/MiniJsonTest
UnitTest/MiniJsonGTest