ejson4cpp使用文档
这篇文档系统介绍了 ejson4cpp 的定位、接入方式与完整 API 体系,核心目标是“低使用门槛 + 高序列化性能”。库定位与性能特征ejson4cpp 面向 C++11+ 跨平台场景,强调 FromJSON/ToJSON 双核心接口的低心智负担。文档给出与 rapidjson、nlohmann-json、json…
代码仓库:https://github.com/ACking-you/ejson4cpp ejosn4cpp :意味着这是一个使用上非常 easy,同时性能上也非常 efficiency c++ json解析库。 支持c++11及以上,并且完全的跨平台。 使用 easy 体现在:api简单,你只需要关注两个函数(FromJSON、ToJSON),且支持一键json结构体互转。引入简单,支持cmake命令一键引入项目并使用。错误定位简单,无论是解析json还是序列化为json,任何错误的操作都会有详细的报错信息(模拟打印了堆栈信息),让错误定位更简单。 性能 efficiency 体现在: 本机benchmark(3000行json)结果如图: benchmark反序列化(Parse)性能明显领先 nlohmann-json 和 jsoncpp,但只有 rapidjson 的一半性能。序列化(Stringify)性能遥遥领先其他所有json库一个数量级。查找(FindMember):由于看过 rapidjson 源码,发现其内部每个元素的节点是以数组的形式组织的,并没有用到其他高深的数据结构,故专门对他进行成员查找测试,发现确实是 O(n) 级别的查找性能。 benchmark的代码仓库:https://github.com/ACking-you/bench_json4cpp快速开始要求C++11及以上,是跨全平台的安装与引入 推荐用以下两种方式进行引入: 方法一:通过cmake中的 FetchContent 模块引入 在项目的cmake中添加下列代码进行引入,国内如果因为网络问题无法使用可以换这个gitee的镜像源:https://gitee.com/acking-you/ejson4cpp.gitinclude(FetchContent) FetchContent_Declare( ejson4cpp GIT_REPOSITORY https://github.com/ACking-you/ejson4cpp.git GIT_TAG v1.5.2 GIT_SHALLOW TRUE) FetchContent_MakeAvailable(ejson4cpp) 在需要使用该库的目标中链接 ejson 即可。target_link_libraries(target ejson) 方法二:手动下载包,然后通过cmake命令引入 通过git命令下载项目源码git clone https://github.com/ACking-you/ejson4cpp.git 将该项目添加到子项目中:add_subdirectory(ejson4cpp) 在需要使用该库的目标中链接 ejson 即可。target_link_libraries(target ejson) 开始使用 这里以解析 json 的配置文件映射到 C++ 结构体为例子来进行讲解。 假设有redis、mysql、日志服务需要通过配置文件来进行配置,我们先写下结构体如下:struct server { int port{}; std::string host; }; struct log { std::string level; std::string filedir; std::string formatter; }; struct config { log logger; server redis; server mysql; }; 一个模拟的json配置文件如下:{ "logger": { "filedir": "home/project/1", "formatter": "default", "level": "debug" }, "mysql": { "host": "192.31.1.1", "port": 1314 }, "redis": { "host": "127.0.0.1", "port": 1444 } } 现在要实现的功能是读取json配置文件的数据将 config 结构体进行初始化,我们可以按照下面的步骤进行: 完整代码请看 example/example1.cc 让server、log、config这几个自定义类型支持 json 序列化,添加下列宏定义即可:// auto generate log/server/config to_json and from_json AUTO_GEN_NON_INTRUSIVE(log, level, filedir, formatter) AUTO_GEN_NON_INTRUSIVE(server, host, port) AUTO_GEN_NON_INTRUSIVE(config, logger, redis,…
正在初始化 WebAssembly 引擎…
首次编译原生模块可能需要数秒
就绪后,页面交互将以接近原生的速度运行