QT开发中文网

struct st_answer_trueOrfalse { bool banswer;//答案 bool banswer_standard;//标准答案 bool bret; //结果 }; //选择题 struct st_answer_choose { int banswer;//答案 int banswer_standard;//标准答案 bool bret; //结果 }; //多选择题 struct st_answer_cho...

好的,以下是封装结构体与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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=12075

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?