CJsonObject - 基于 cJSON 的 C++ 版 JSON 库


MIT
跨平台
C/C++

软件简介

简单好用的CJSON库CJsonObject,让使用json如使用C原生的结构体那般方便,随心所欲。

CJsonObject是个优秀的CJSON库,截止2019年7月31日,CJsonObject开源一年,未经推广就在GitHub上获得130多star和60多fork。CJsonObject是基于cJSON全新开发一个C版的JSON库,最大优势是轻量,简单好用,开发效率极高。

CJsonObject只有4个文件,拷贝到自己代码里源码级集成即可,无须编译成库,且跨平台和编译器。与大部分json解析库访问多层嵌套json非常麻烦不同,CJsonObject对多层嵌套json的读取和生成使用非常简单。用
CJsonObject 的好处还在于完全不用专门的文档,头文件即文档,看完 Demo 立刻就会用,所有函数都十分通俗易懂。

绝大部分使用JSON的场景下,易用性与开发效率才是第一位的,而不是解析性能。CJsonObject
经过5年超过9个项目的生产环境应用验证其功能稳定性,开源后又被众多开发者用到自己的项目中,绝对是个很好的选择。

许可证:MIT

托管地址: 码云gitee
Github

功能: JSON 解析,JSON 生成

平台: 标准 C/C++ 开发,跨平台

使用说明:将
CJsonObject.hppCJsonObject.cppcJSON.hcJSON.c
四个文件加入代码目录,与用户自己的代码一起编译即可。

示例代码:

#include #include #include "../CJsonObject.hpp"

int main()
{
    int iValue;
    std::string strValue;
    neb::CJsonObject oJson("{\"refresh_interval\":60,"
                        "\"dynamic_loading\":["
                            "{"
                                "\"so_path\":\"plugins/User.so\", \"load\":false, \"version\":1,"
                                "\"cmd\":["
                                     "{\"cmd\":2001, \"class\":\"neb::CmdUserLogin\"},"
                                     "{\"cmd\":2003, \"class\":\"neb::CmdUserLogout\"}"
                                "],"
                                "\"module\":["
                                     "{\"path\":\"im/user/login\", \"class\":\"neb::ModuleLogin\"},"
                                     "{\"path\":\"im/user/logout\", \"class\":\"neb::ModuleLogout\"}"
                                "]"
                             "},"
                             "{"
                             "\"so_path\":\"plugins/ChatMsg.so\", \"load\":false, \"version\":1,"
                                 "\"cmd\":["
                                      "{\"cmd\":2001, \"class\":\"neb::CmdChat\"}"
                                 "],"
                             "\"module\":[]"
                             "}"
                        "]"
                    "}");
     std::cout << oJson.ToString() << std::endl;
     std::cout << "-------------------------------------------------------------------" << std::endl;
     std::cout << oJson["dynamic_loading"][0]["cmd"][1]("class") << std::endl;
     oJson["dynamic_loading"][0]["cmd"][0].Get("cmd", iValue);
     std::cout << "iValue = " << iValue << std::endl;
     oJson["dynamic_loading"][0]["module"][0].Get("path", strValue);
     std::cout << "strValue = " << strValue << std::endl;
     std::cout << "-------------------------------------------------------------------" << std::endl;
     oJson.AddEmptySubObject("depend");
     oJson["depend"].Add("nebula", "https://github.com/Bwar/Nebula");
     oJson["depend"].AddEmptySubArray("bootstrap");
     oJson["depend"]["bootstrap"].Add("BEACON");
     oJson["depend"]["bootstrap"].Add("LOGIC");
     oJson["depend"]["bootstrap"].Add("LOGGER");
     oJson["depend"]["bootstrap"].Add("INTERFACE");
     oJson["depend"]["bootstrap"].Add("ACCESS");
     std::cout << oJson.ToString() << std::endl;
     std::cout << "-------------------------------------------------------------------" << std::endl;
     std::cout << oJson.ToFormattedString() << std::endl;
}