前面学了 JSON 基础,现在来学习下实际编程开发。
对于 C/C++ 开发人员,单从使用简单来讲,首选的应该是 nlohmann json 了,其官方网站:
https://json.nlohmann.me/
代码下载 github 地址:
https://github.com/nlohmann/json
一、下载使用
$wget https://github.com/nlohmann/json/archive/refs/tags/v3.10.5.tar.gz
$tar zxvf v3.10.5.tar.gz
将解压后的目录里的 include 目录下的内容直接拷贝到开发工程目录下,然后包含 “nlohmann/json.hpp” 头文件即可直接使用,具体如下:
#include "nlohmann/json.hpp"
#include <stdio.h>
using namespace nlohmann;
int main(int argc, char const *argv[]) {
json j = R"(
{
"name":"一周思进",
"age":30
}
)"_json;
printf("%s\n", j.dump().c_str());
return 0;
}
编译时需要启用 c++11,执行结果如下:
$make
g++ -std=c++11 -I./ config.cpp
$./a.out
{"age":30,"name":"一周思进"}
二、json 对象初始化
方式一、
json j = R"(
{
"name":"一周思进",
"age":30
}
)"_json;
R”()” 是 C++ 标准特性,用于嵌入原始字符串,即不做任何转义。
__json 附加在字符串后面用于对字符串进行反序列号,这样就转化成 json 对象了。
方式二:
json j = {
{"name", "一周思进"},
{"age", 30}
};
方式三:
json j;
j["name"] = "一周思进";
j["age"] = 30;
可以看出来这相当的简单,简单的赋值操作就可以了。
如果要创建个数组,则是需要调用 json::array()
,如下:
json j = json::array[];
j[0]["name"] = "xiaozhou";
j[1]["name"] = "xiaoqiang";
如要获取数组的个数 j.size() 即可。
三、序列化和反序列化
序列化
json j = {
{"name", "一周思进"},
{"age", 30}
};
std::string s = j.dump();
反序列化
auto j = json::parse(R"({"name":"一周思进","age":30})");
四、JSON 对象解析
直接看示例代码
int main(int argc, char const *argv[]) {
json j = {
{"name", "一周思进"},
{"age", 30}
};
// 字符串处理
// 方式一
std::string name_string;
j["name"].get_to(name_string);
printf("1name:%s\n", name_string.c_str());
// 方式二
auto name2_string = j["name"].get<std::string>();
printf("2name:%s\n", name_string.c_str());
// 整型处理
// 方式一
int age = j["age"];
printf("1age:%d\n", age);
// 方式二
j["age"].get_to(age);
printf("2age:%d\n", age);
// 键不存在
// 抛出异常
try
{
j.at("test").get_to(age);
printf("3age:%d\n", age);
}
catch(json::out_of_range& e)
{
printf("1parse error.\n");
}
return 0;
}
更多的接口操作需要看
https://json.nlohmann.me/api/basic_json/