C++ JSON库json11的使用方法
提纲
1、下载并集成到自己的项目
2、基本用法
3、使用案例
1 下载并集成到自己的项目
json11是一个轻量级的C++11库, 提供JSON的序列化和反序列化功能。它的主页是:https://github.com/dropbox/json11。
首先用git clone https://github.com/dropbox/json11.git将json11库下载到本地。
使用时只需要在我们的工程中引入头文件json11.hpp和源文件json11.cpp即可使用。
在自己的项目中只需要include "json11.hpp",就可以在自己的代码中使用json11的库函数了。
2 基本用法
/**
* 1、将json对象转成json字符串
*/
Json my_json = Json::object {
{ "key1", "value1" },
{ "key2", false },
{ "key3", Json::array { 1, 2, 3 } },
};
std::string json_str = my_json.dump();
/**
* 2、 将普通对象序列化成json字符串
*
*/
class Point {
public:
int x;
int y;
Point (int x, int y) : x(x), y(y) {}
Json to_json() const { return Json::array { x, y }; }
};
std::vector<Point> points = { { 1, 2 }, { 10, 20 }, { 100, 200 } };
std::string points_json = Json(points).dump();
/**
* 3、将json字符串转成json对象,并取其中的字段,通过这些字段可以进一步构造普通对象
*/
std::string srcJson = "{\"code\":0, \"flag\":true, \"msg\":\"success\"}";
//反序列化为json对象
std::string err;
json11::Json mJson = json11::Json::parse(srcJson, err);
//获取对应字段的值
int code = mJson["code"].int_value();
bool flag = mJson["flag"].bool_value();
std::string msg = mJson["msg"].string_value();
std::cout << "code : " << code << std::endl;
std::cout << "flag : " << flag << std::endl;
std::cout << "msg : " << msg << std::endl;
//在json中检测某个字段是否存在的方法如下:
//存在:
if (root["url"].type() != Json::NIL)
3、使用案例
本案例是为了使用json11而写的,为正式项目中使用做了一个基本的验证。
root@DF-01:/home/dfcv_dev/fastdds/soa_v2c/src/Util/Json# tree
.
├── CMakeLists.txt
├── json11.cxx
├── json11.h
└── Json11Main.cxx
0 directories, 4 files
root@DF-01:/home/dfcv_dev/fastdds/soa_v2c/src/Util/Json#
以上项目是用CMake去管理编译过程的,所以有一个CMakeLists.txt文件。主要的使用代码在Json11Main.cxx中,项目中要包括json11.h和json11.cxx是自然的事情。
下面我列出CMakeLists.txt和Json11Main.cxx中的代码,方便需要的人自己取用。
点击查看CMakeLists.txt代码
cmake_minimum_required(VERSION 3.16.3)
project("Json11Main")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)
message(STATUS "Configuring Json11Main...")
add_executable(Json11Main json11.cxx Json11Main.cxx)
下面列出Json11Main.cxx中的代码,这些代码可以在项目中直接使用,稍微修改就可以。
点击查看Json11Main.cxx代码
#include "json11.h"
#include <iostream>
int main()
{
/**
* 1 JsonObject 到 JsonStr
*/
json11::Json my_json = json11::Json::object{
{"key1", "value1"},
{"key2", false},
{"key3", json11::Json::array{1, 2, 3}},
};
std::string json_str = my_json.dump();
std::cout << json_str << std::endl;
/**
* 2 jsonStr 到 jsonObject
*/
std::string srcJson = "{\"code\":0, \"flag\":true, \"msg\":\"success\"}";
// 反序列化为json对象
std::string err;
json11::Json mJson = json11::Json::parse(srcJson, err);
std::cout << mJson.dump() << std::endl;
}
参考资料
1、https://blog.csdn.net/new9232/article/details/128511137
2、https://github.com/dropbox/json11
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通