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++的函数耗时以及代码片段耗时详情