c++如何使用json配置文件

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++如何使用json配置文件相关的知识,希望对你有一定的参考价值。

注意文件格式

c++读写文件格式最好是utf-8格式,很多读写json

定义自己的数据结构

typedef struct s_camera
{
	std::string name;
	std::string addr;
}s_camera;

数据结构定义好以后,就可以开始进行读写
使用c++ fstream 来读json文本文件,获取文本大小

	stream.seekg(0, ios::end);
	fsize = stream.tellg();
	stream.seekg(0, ios::beg);

原理就是定位到文件末尾,获取位置,再回到文件首,这样就知道自己需要的缓冲区的大小了。

show me the code

#include "json.hpp"
#include <fstream>
#include <vector>
using json = nlohmann::json;


typedef struct s_camera
{
	std::string name;
	std::string addr;
}s_camera;

static string remove_n(const char * begin, size_t len)
{
	const char *pos = begin;
	const char *end = begin+len;
	string s;
	while (pos < end)
	{
		if (*pos != '\\n' && *pos!=' ' && *pos!='\\r')
			s.push_back(*pos);
		pos++;
	}
	return s;
}

static size_t GetCamera(std::vector<s_camera> &ca)
{
	//注意一定是utf-8格式
	std::fstream stream("./wisdom.json");
	std::streampos pos = 0;
	//char *buffer = NULL;
	//std::string str;
	int num = 0;
	int fsize = 0;
	char buffer[64000] = {0};
	if (stream.is_open())
	{
		//std::stringstream s;
		//stream.rdbuf();
		//str = s.str();
		stream.seekg(0, ios::end);
		fsize = stream.tellg();
		stream.seekg(0, ios::beg);
		//str.resize(fsize+1);
		//char *b = &str[0];
	
		//memset(buffer, 0, 1024);
		if (fsize < 64000)
			stream.read(&buffer[0], fsize);
		else
			fsize = 0;
		buffer[fsize] = '\\0';
		//str = buffer;
	}
	
	if (fsize>0)
	{
		string str = remove_n(&buffer[0], fsize);
		try
		{
			//char *pos = &buffer[0];
			const char *pos = str.c_str();
			json obj = json::parse(pos);
			if (obj["num"].is_number())
				num = obj["num"];
			size_t size = obj["camera"].size();
			for (size_t i = 0; i < size; i++)
			{
				s_camera s;
				s.name = obj["camera"][i]["name"];
				s.addr = obj["camera"][i]["addr"];
				ca.push_back(s);
			}
			return size;
		}
		catch (...)
		{
			std::cout << "解析错误" << std::endl;
		}
	}
	return -1;
}

以上是关于c++如何使用json配置文件的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

VS Code配置markdown代码片段

VS Code配置markdown代码片段

VS Code配置snippets代码片段快速生成html模板,提高前端编写效率

如何在构建时在 C++ 中包含 JSON 文件/对象

C++ 代码片段执行