c++读取JSON格式的配置文件——jsoncpp库+输入输出流

文章展示了如何利用C++的jsoncpp库读取配置文件中的JSON数据,通过Json::Reader解析二进制文件内容到Json::Value对象,然后访问和检查Json::Value的值,包括对象、数组、字符串等不同类型的JSON数据。

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

原理:通过读取配置文件中的数据,然后使用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库的文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值