原理:通过读取配置文件中的数据,然后使用jsoncpp的库,以json的格式读取得到文件中的参数。
还需要的库:#include <fstream> //读写文件 c++标准库
和#include <json/json.h>
jsoncpp库
例子:
./demo.json 文件
{
"adc": {
"id": 1,
"one": "admin"
},
"res": {
"two": "zip",
"rate": 6.097
}
}
#include <fstream>
#include <json/json.h>
struct adc
{
int id;
std::string one;
};
struct res
{
std::string two;
double rate;
};
int main()
{
adc tm1;
res tm2;
// 使用输入输出流读取json文件以二进制的形式读取
std::fstream ifs;
ifs.open("./demo.json", std::ios::binary | std::ios::in);
if (!ifs.is_open()) {
cerr << "文件打开错误";
}
// 读取到的二进制文件 调用jsoncpp读取其中的数据
Json::Reader reader;
Json::Value root;
if (ifs.is_open())
{
if (reader.parse(ifs, root))
{
// 已经将读取到文本文档存入到Json::Value root对象中了
// Json::Value 类型的对象进行
tm1.id = root["adc"]["id"].asInt();
tm1.one = root["adc"]["one"].asString();
tm2.two = root["res"]["two"].asString();
tm2.rate = root["res"]["rate"].asDouble();
}
}
cout << tm1.id << endl;
cout << tm1.one << endl;
cout << tm2.two << endl;
cout << tm2.rate << endl;
ifs.close();
}
结果:
1
admin
zip
6.097
// 使用输入输出流读取json文件以二进制的形式读取
std::fstream ifs;
ifs.open("./a.json", std::ios::binary | std::ios::in);
if (!ifs.is_open()) {
cerr << "文件打开错误";
}
// 读取到的二进制文件 调用jsoncpp读取其中的数据
Json::Reader reader;
Json::Value root;
if (reader.parse(ifs, root))
{
// 已经将读取到文本文档存入到Json::Value root对象中了
// Json::Value 类型的对象进行
}
ifs.close();
Json::Reader
是一个用于解析JSON数据的类。使用该类可以将JSON字符串解析为Json::Value
对象或其他相关数据结构Json::Reader
类中的parse
方法用于将JSON文本解析为Json::Value
对象
Json::Value
是Jsoncpp库中的一个类,用于表示JSON数据的值。它可以表示各种类型的JSON数据,包括对象、数组、字符串、整数、浮点数和布尔值。
以下是Json::Value
类的一些常见用法:
构造Json::Value对象
Json::Value value; // 默认构造一个空的Json::Value对象
Json::Value objectValue(Json::objectValue);
objectValue["key"] = "value"; // 创建一个包含键值对的对象
Json::Value arrayValue(Json::arrayValue);
arrayValue.append(1);
arrayValue.append(2);
arrayValue.append(3); // 创建一个包含元素的数组
Json::Value stringValue("hello"); // 创建一个字符串值
Json::Value intValue(42); // 创建一个整数值
Json::Value floatValue(3.14); // 创建一个浮点数值
Json::Value boolValue(true); // 创建一个布尔值
访问Json::Value的值
Json::Value value;
value["key"] = "value";
std::string strValue = value["key"].asString();
int intValue = value["key"].asInt();
float floatValue = value["key"].asFloat();
bool boolValue = value["key"].asBool();
检查Json::Value的类型
Json::Value value;
value["key"] = "value";
if (value.isString()) {
// 处理字符串类型
}
if (value.isInt()) {
// 处理整数类型
}
if (value.isFloat()) {
// 处理浮点数类型
}
if (value.isBool()) {
// 处理布尔类型
}
迭代Json::Value对象
Json::Value value;
value["key1"] = "value1";
value["key2"] = "value2";
value["key3"] = "value3";
for (auto it = value.begin(); it != value.end(); ++it) {
const std::string& key = it.key().asString();
const std::string& value = (*it).asString();
// 处理键值对
}
这些仅是Json::Value
类的一些常见用法。有关更多信息,请参阅Jsoncpp库的文档。