好的,以下是封装结构体与JSON相互转化的两个函数的示例代码:
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>
// 将 st_subject 结构体转换为 JSON 对象
QJsonObject subjectToJson(const st_subject& subject) {
QJsonObject jsonObject;
jsonObject["subject_number"] = subject.subject_number;
jsonObject["subject_type"] = subject.subject_type;
jsonObject["subject_name"] = subject.subject_name;
// 根据题目类型选择对应的字段进行赋值
switch (subject.subject_type) {
case 0: { // True/False
QJsonObject answerObject;
answerObject["banswer"] = subject.subject_Type.trueOrfalse.banswer;
answerObject["banswer_standard"] = subject.subject_Type.trueOrfalse.banswer_standard;
answerObject["bret"] = subject.subject_Type.trueOrfalse.bret;
jsonObject["subject_Type"] = answerObject;
break;
}
case 1: { // Choose
QJsonObject answerObject;
answerObject["banswer"] = subject.subject_Type.choose.banswer;
answerObject["banswer_standard"] = subject.subject_Type.choose.banswer_standard;
answerObject["bret"] = subject.subject_Type.choose.bret;
jsonObject["subject_Type"] = answerObject;
break;
}
case 2: { // Multiple Choose
QJsonObject answerObject;
QJsonArray banswerArray, banswerStandardArray;
for(const auto & ans : subject.subject_Type.choose_multiple.banswer)
banswerArray.append(ans);
for(const auto & ans : subject.subject_Type.choose_multiple.banswer_standard)
banswerStandardArray.append(ans);
answerObject.insert("banswer", banswerArray);
answerObject.insert("banswer_standard", banswerStandardArray);
answerObject["bret"] = subject.subject_Type.choose_multiple.bret;
jsonObject["subject_Type"] = answerObject;
break;
}
default:
break;
}
return jsonObject;
}
// 将 JSON 对象转换为 st_subject 结构体
st_subject subjectFromJson(const QJsonObject& jsonObject) {
st_subject subject;
if (jsonObject.contains("subject_number") && jsonObject["subject_number"].isDouble()) {
subject.subject_number = jsonObject["subject_number"].toInt();
}
if (jsonObject.contains("subject_type") && jsonObject["subject_type"].isDouble()) {
subject.subject_type = jsonObject["subject_type"].toInt();
}
if (jsonObject.contains("subject_name") && jsonObject["subject_name"].isString()) {
subject.subject_name = jsonObject["subject_name"].toString();
}
// 根据题目类型选择对应的字段进行赋值
if (jsonObject.contains("subject_Type")) {
QJsonObject answerObject = jsonObject["subject_Type"].toObject();
switch (subject.subject_type) {
case 0: { // True/False
st_answer_trueOrfalse trueOrfalse;
trueOrfalse.banswer = answerObject.value("banswer").toBool();
trueOrfalse.banswer_standard = answerObject.value("banswer_standard").toBool();
trueOrfalse.bret = answerObject.value("bret").toBool();
subject.subject_Type.trueOrfalse = trueOrfalse;
break;
}
case 1: { // Choose
st_answer_choose choose;
choose.banswer = answerObject.value("banswer").toInt();
choose.banswer_standard = answerObject.value("banswer_standard").toInt();
choose.bret = answerObject.value("bret").toBool();
subject.subject_Type.choose = choose;
break;
}
case 2: { // Multiple Choose
st_answer_choose_multiple choose_multiple;
QJsonArray banswerArray = answerObject.value("banswer").toArray();
QJsonArray banswerStandardArray = answerObject.value("banswer_standard").toArray();
for(const auto & ans : banswerArray)
choose_multiple.banswer.append(ans.toInt());
for(const auto & ans : banswerStandardArray)
choose_multiple.banswer_standard.append(ans.toInt());
choose_multiple.bret = answerObject.value("bret").toBool();
subject.subject_Type.choose_multiple = choose_multiple;
break;
}
default:
break;
}
}
return subject;
}
int main() {
// 假设有一个 st_subject 对象需要转换为 JSON
st_subject exampleSubject;
exampleSubject.subject_number = 1;
exampleSubject.subject_type = 0; // True/False
exampleSubject.subject_name = "Example Subject";
exampleSubject.subject_Type.trueOrfalse.banswer = true;
exampleSubject.subject_Type.trueOrfalse.banswer_standard = true;
exampleSubject.subject_Type.trueOrfalse.bret = true;
QJsonObject jsonObject = subjectToJson(exampleSubject);
// 输出 JSON 字符串
qDebug() << QJsonDocument(jsonObject).toJson(QJsonDocument::Indented);
// 假设有一个 JSON 对象需要转换为 st_subject
QJsonObject jsonInput; // 假设是从外部获取的 JSON 数据
jsonInput["subject_number"] = 2;
jsonInput["subject_type"] = 1; // Choose
jsonInput["subject_name"] ="Another Subject";
QJsonObject answerObject;
answerObject["banswer"] = 2;
answerObject["banswer_standard"] = 3;
answerObject["bret"] = true;
jsonInput["subject_Type"] = answerObject;
st_subject parsedSubject = subjectFromJson(jsonInput);
// 在这里使用转换后的 st_subject 对象...
return 0;
}
上述示例代码演示了如何将 st_subject
结构体转换为 JSON 对象,以及如何从 JSON 对象中解析出 st_subject
结构体。注意根据题目类型选择相应的字段进行赋值和解析操作。
内容由零声教学AI助手提供,问题来源于学员提问