// ============================================================================
//  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 <QCoreApplication>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QDebug>

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;
}
