// ============================================================================ // qt_json_parse_write —— 教学补充示例(非 wiki 生成,手工维护) // 用途:方案书「C++方向 Day3」要求的 JSON 等主流数据格式解析,仓库 p03/ch11 // 原有 wiki 抓取内容只覆盖 QFile/QTextStream/QDataStream,没有 JSON, // 故补一个最小示例。 // 说明:JSON 读写不需要 GUI,用 QCoreApplication 即可,不需要 // QT_QPA_PLATFORM=offscreen,直接 tools/run_qt.sh qt_json_parse_write 即可。 // 配套文档:docs/teaching/examples/json_io/README.md // ============================================================================ #include #include #include #include #include int main(int argc, char* argv[]) { QCoreApplication app(argc, argv); // 1) 构造一个 JSON 对象(对应课程里“学员信息”这类结构) QJsonObject student; student["name"] = QStringLiteral("张三"); student["score"] = 92; QJsonArray tags; tags.append(QStringLiteral("Qt")); tags.append(QStringLiteral("C++")); student["tags"] = tags; // 2) 序列化:QJsonObject -> QJsonDocument -> 字节数组(可直接写文件) QJsonDocument doc(student); QByteArray bytes = doc.toJson(QJsonDocument::Indented); qDebug().noquote() << "序列化结果:\n" << bytes; // 3) 反序列化:字节数组 -> QJsonDocument -> 取值 QJsonDocument parsed = QJsonDocument::fromJson(bytes); if (!parsed.isNull() && parsed.isObject()) { QJsonObject obj = parsed.object(); qDebug() << "姓名:" << obj["name"].toString(); qDebug() << "分数:" << obj["score"].toInt(); const QJsonArray parsedTags = obj["tags"].toArray(); for (const QJsonValue& v : parsedTags) qDebug() << "标签:" << v.toString(); } else { qDebug() << "JSON 解析失败"; return 1; } return 0; }