1、添加jsonAdd类

feature/struct-menu-20241023
mzh 1 week ago
parent 9529f91821
commit 6061b01454

@ -17,3 +17,63 @@ CUIConfig *CFDStructDataManagerBase::getParamUIConfig()
{
return nullptr;
}
// 写入json
void jsonAdd(rapidjson::Document& document, QVariant value, QVector<QVariant> path) {
using namespace rapidjson;
// 获取分配器
Document::AllocatorType& allocator = document.GetAllocator();
// 递归地创建路径中的对象
Value* current = &document;
for (int i = 0; i < path.size(); ++i) {
// const std::string& key = path[i];
QVariant key = path.at(i);
// 如果到了最后一层路径,设置值
if (i == path.size() - 1) {
if(key.type() == QVariant::String)
{
//如果是路径
// 检查路径末尾是否存在
if (current->HasMember(key.toString().toStdString().c_str())) {
if(value.type() == QVariant::Int)
(*current)[key.toString().toStdString().c_str()].SetInt(value.toInt()); // 如果存在则替换
if(value.type() == QVariant::Double)
(*current)[key.toString().toStdString().c_str()].SetDouble(value.toDouble()); // 如果存在则替换
if(value.type() == QVariant::String)
(*current)[key.toString().toStdString().c_str()].SetString(value.toString().toStdString().c_str(),allocator); // 如果存在则替换
} else {
if(value.type() == QVariant::Int)
current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), Value().SetInt(value.toInt()), allocator); // 不存在则添加
if(value.type() == QVariant::Double)
current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), Value().SetDouble(value.toDouble()), allocator); // 不存在则添加
if(value.type() == QVariant::String)
current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), Value().SetString(value.toString().toStdString().c_str(),allocator), allocator); // 不存在则添加
}
}else if(key.type() == QVariant::Int){
//如果是数组idx
}
} else {
if(key.type() == QVariant::String)
{
//如果是路径
// 检查是否存在该路径,不存在则创建
if (!current->HasMember(key.toString().toStdString().c_str())) {
Value newObject(kObjectType); // 创建一个新的对象
current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), newObject, allocator);
}
// 将 current 指向下一级
current = &(*current)[key.toString().toStdString().c_str()];
}else if(key.type() == QVariant::Int){
//如果是数组idx
}
}
}
}

@ -6,6 +6,10 @@
#include "CUIProperty/CUISigsCenter.h"
#include "CUIProperty/CUIConfig.h"
#include "CUIProperty/CUIDefine.h"
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
class CFDSTRUCTDATAMANAGER_EXPORT CFDStructDataManagerBase : public QObject
{
@ -20,6 +24,7 @@ signals:
protected:
CUIConfig* m_uiConfig = nullptr;
CUISigsCenter* m_cuiSigsCenter = nullptr;
void jsonAdd(rapidjson::Document& document, QVariant value, QVector<QVariant> path);
};
#endif // CFDSTRUCTDATAMANAGERBASE_H

Loading…
Cancel
Save