生成
std::string slicedResultToJsonString(const cura::FffGcodeWriter::SlicedMeshInfo& slicedResult)
{
float size_x = INT2MM(slicedResult.boundInfo.max.x - slicedResult.boundInfo.min.x);
float size_y = INT2MM(slicedResult.boundInfo.max.y - slicedResult.boundInfo.min.y);
float size_z = INT2MM(slicedResult.boundInfo.max.z - slicedResult.boundInfo.min.z);
rapidjson::Document d;
d.SetObject();
rapidjson::Document::AllocatorType& allocator = d.GetAllocator();
d.AddMember("size_x ", size_x, allocator);
d.AddMember("size_y ", size_y, allocator);
d.AddMember("size_z ", size_z, allocator);
d.AddMember("supplies_usage", slicedResult.totalFilamentUsed, allocator);
d.AddMember("layers", slicedResult.totalLayers, allocator);
d.AddMember("estimate", slicedResult.totalTimes, allocator);
d.AddMember("machine_name", "Anycubic", allocator);
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
d.Accept(writer);
return strBuf.GetString();
}
遍历
int loadJson(const std::string& sliceParam, Settings& settings)
{
rapidjson::Document document;
document.Parse(sliceParam.c_str());
if (document.HasParseError())
{
return 1;
}
for (rapidjson::Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); itr++)
{
rapidjson::Value jKey;
rapidjson::Value jValue;
rapidjson::Document::AllocatorType allocator;
jKey.CopyFrom(itr->name, allocator);
jValue.CopyFrom(itr->value, allocator);
std::string name;
std::string value_string;
if (jKey.IsString())
{
name = jKey.GetString();
}
if (jValue.IsString())
{
value_string = jValue.GetString();
}
else if (jValue.IsTrue())
{
value_string = "true";
}
else if (jValue.IsFalse())
{
value_string = "false";
}
else if (jValue.IsNumber())
{
std::ostringstream ss;
ss << jValue.GetDouble();
value_string = ss.str();
}
else
{
return 1;
}
settings.add(name, value_string);
}
return 0;
}