c++类 封装cjson_轻量简单好用的C++JSON库CJsonObject

本文介绍了CJsonObject,一个基于cJSON的C++版JSON库,特点是轻量、简单易用,适合快速开发。CJsonObject通过封装cJSON避免了内存泄漏问题,提供了直观的API,适用于各种C++项目。文章包含CJsonObject的使用示例和源码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. JSON概述

JSON: JavaScript 对象表示法( JavaScript Object Notation) 。是一种轻量级的数据交换格式。 它基于ECMAScript的一个子集。许多编程语言都很容易找到JSON 解析器和 JSON 库。 JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。不同语言的不同json库对json标准的支持不尽相同,为了能让尽可能多的json库都能正常解析和生成json,定义JSON的规范很重要,推荐一个JSON规范《JSON风格指南》。

2. 常用C&C++ JSON库

常用且知名度较高的C&C++的JSON库有cJSON、json-c、JsonCpp等,腾讯员工开源的一个RapidJSON以高性能著称。C&C++的JSON库比较见RapidJSON作者的比较nativejson-benchmark。

3. 非常简单易用的CJsonObject

CJsonObject是基于cJSON全新开发一个C++版的JSON库,CJsonObject的最大优势是轻量(只有4个文件,拷贝到自己代码里即可,无须编译成库,且跨平台和编译器)、简单好用,开发效率极高。 我一直使用的json库是一个较老版本的cJSON,cJSON的好处是简单易用,而且只有两个文件,直接复制到自己的代码中就可以用。cJSON也有一个非常容易让初用者头痛的地方,一不小心就造成内存泄漏了。为此,我基于cJSON封装了一个C++版的CJsonObject,该库比cJSON更简单易用,且只要不是有意不释放内存就不会发生内存泄漏。用CJsonObject的好处在于完全不用文档,看完Demo马上就会用,不明白的看一下头文件就知道,所有函数都十分通俗易懂,最为关键的一点是解析JSON和生成JSON的编码效率非常高。当然,毕竟是经过cJSON封装而来,效率会略低于cJSON,cJSON不支持的CJsonObject也不支持。个人认为,既然已经选了json,那一点点的解析性能差异就不重要了,如果追求性能可以选protobuf。CJsonObject在我最近4年做过的8个项目中广泛应用。CJsonObject非常简单易用,且表现稳定,2018年5月我把它开源https://github.com/Bwar/CJsonObject,并将持续维护。

来看看CJsonObject是如何简单易用:

demo.cpp:

#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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值