boost 解析json
BOOST的版本采用1.79
函数的参数均为使用,内部实现全是写死的demo。
一、写JSON文件
int ReadManager::WriteJson(const std::string&inparam,const std::string &out)
{
//打开文件
std::fstream os;
os.open(boost::filesystem::current_path().string() + "\\demo.json",std::ios_base::out);
if(!os.is_open())
{
std::cout << "Open Error" << std::endl;
return -1;
}
//设置json内容
boost::json::object rootObject; //boost 1.79中 的json对象
boost::json::array jsonArray; //boost 1.79中 的json数组
jsonArray.reserve(10);
for(int i = 0;i < 10;i++)
{
jsonArray.push_back(i); //放入json数组
}
boost::json::object childObject;
childObject["child"] = "childname"; //赋值操作
childObject["age"] = "12"; //赋值操作
rootObject["Persion"] = childObject; //赋值操作
rootObject["JsonArray"] = jsonArray; //赋值操作
std::cout << rootObject << std::endl;
os << rootObject; //写到文件
os.close(); //关闭文件
return 0;
}
二、读取json文件
/*
* 这里读取的文件,为上面函数写的demo.json文件
*/
int ReadManager::ReadJson(const std::string &inparam,const std::string &out) {
std::string filepath;
std::string jsonstr;
if (-1 == LoadStr(filepath, jsonstr))
{
return -1;
}
//序列化json对象
boost::json::value jsonvalue = boost::json::parse(jsonstr); //序列化json字符串
//json序列化后为json对象
boost::json::object rootObject = jsonvalue.as_object(); //as_object将序列化的内容作为json对象,有其他方法类似as_array具体根据业务选择
//
std::cout << rootObject["Persion"] << std::endl; //直接输出对象中的结果
std::cout << rootObject["JsonArray"] << std::endl;
return 0;
}
三、完整代码
头文件
#ifndef __READ__MANAGER__H__
#define __READ__MANAGER__H__
/// boost 1.79
/// boost 1.79
#include <string>
#include <boost/json.hpp>
class ReadManager
{
public:
//读json文件修改内容
int ReadJson(const std::string &inparam,const std::string &out);
//写json文件修改内容
int WriteJson(const std::string&inparam,const std::string &out);
//读取文件内容
int LoadStr(const std::string &filepath,std::string &out);
private:
};
#endif
源文件
#include "read_manager.h"
#include <boost/json.hpp>
#include <boost/json/parse.hpp>
#include <fstream>
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/json/array.hpp>
#include <boost/json/object.hpp>
int ReadManager::ReadJson(const std::string &inparam,const std::string &out) {
std::string filepath;
std::string jsonstr;
if (-1 == LoadStr(filepath, jsonstr))
{
return -1;
}
//序列化json对象
boost::json::value jsonvalue = boost::json::parse(jsonstr);
//json序列化后为json对象
boost::json::object rootObject = jsonvalue.as_object();
//
std::cout << rootObject["Persion"] << std::endl;
std::cout << rootObject["JsonArray"] << std::endl;
return 0;
}
int ReadManager::WriteJson(const std::string&inparam,const std::string &out)
{
std::fstream os;
os.open(boost::filesystem::current_path().string() + "\\demo.json",std::ios_base::out);
if(!os.is_open())
{
std::cout << "Open Error" << std::endl;
return -1;
}
//设置json内容
boost::json::object rootObject;
boost::json::array jsonArray;
jsonArray.reserve(10);
for(int i = 0;i < 10;i++)
{
jsonArray.push_back(i);
}
boost::json::object childObject;
childObject["child"] = "childname";
childObject["age"] = "12";
rootObject["Persion"] = childObject;
rootObject["JsonArray"] = jsonArray;
std::cout << rootObject << std::endl;
os << rootObject;
os.close();
return 0;
}
int ReadManager::LoadStr(const std::string &filepath,std::string &out)
{
std::fstream file;
file.open(boost::filesystem::current_path().string() + "\\demo.json",std::ios_base::in);
if(!file.is_open())
{
std::cout << "Open file error" << std::endl;
return -1;
}
if (file) {
file.seekg(0, std::ios::end);
out.resize(file.tellg());
file.seekg(0, std::ios::beg);
file.read(&out[0], out.size());
file.close();
return 0;
} else {
out = "Failed to open the file: " + boost::filesystem::current_path().string() + "\\demo.json";
return -1;
}
}