win8系统,IDE为Visual Studio 2013
导入头文件,设置头文件的包含目录,选择项目-属性。
#include <iostream>
using namespace std;
#include <string>
#include <fstream>//文件读写
#include <rapidjson/document.h>
#include <rapidjson/stringbuffer.h>
#include <rapidjson/prettywriter.h>
using namespace rapidjson;
using rapidjson::Document;
using rapidjson::Value;
读取JSON文件,装入一个字符串中
bool readFile(string & file, string & str)
{
ifstream in;
string line;
in.open(file,ifstream::in);
if (!in.is_open())
return false;
while (getline(in, line))
{
str.append(line + "\n");
}
in.close();
return true;
}
解析Json(字符串)
bool parserJson(string & str, Document & doc)//str->Json格式字符串
{
doc.Parse<0>(str.c_str());
if (doc.HasParseError())
return false;
return true;
}
读取、修改相关值
形如这种[...]是数组IsArray ,以上文件没有这种格式;形如{...}IsObject,可以直接通过键值对获取值。更多详细用法,可以去看相关文档。
void dealJson(Document & doc, double & a, double & b)
{
Value & v = doc["overrides"];//要获取哪个节点,可以修改
if (!v.HasMember("machine_nozzle_offset_x") || !v.HasMember("machine_nozzle_offset_y"))
{
cout << "没有找到machine_nozzle_offset_x或machine_nozzle_offset_y" << endl;
return;
}
// v["machine_nozzle_offset_x"]["default_value"].GetDouble();//读取类型为double的值
// v["machine_nozzle_offset_y"]["default_value"].GetDouble();
v["machine_nozzle_offset_x"]["default_value"].SetDouble(a);//修改值,类型为double
v["machine_nozzle_offset_y"]["default_value"].SetDouble(b);
}
写入Json
void writeStringBuff(StringBuffer & buff, Document & doc)
{
PrettyWriter<StringBuffer> writer(buff);
doc.Accept(writer);
}
写入文件
bool writeFile(string& str, string & file)
{
ofstream fout;
fout.open(file);
if (!fout.is_open())
return false;
fout << str;
fout.close();
return true;
}
rapidjson库下载地址:点击打开链接