You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qt中从JSON文档提取名称并存入QList

提取QJsonDocument数组中的name字段到QList

直接修改你的lambda回调代码即可完成字段提取,步骤如下:

  1. 确认解析后的QJsonDocument是数组类型,避免非法访问
  2. 遍历数组中的每个QJsonObject
  3. 检查每个对象是否包含有效的name字符串字段,符合条件则将值加入列表

修改后的完整代码:

void MainWindow::loadNames()
{
    QNetworkAccessManager *manager = new QNetworkAccessManager;
    QNetworkRequest req(QUrl("http://test:3030/names"));
    QNetworkReply *reply = manager->get(req);

    connect(reply, &QNetworkReply::finished, this, [this, reply, manager](){
        // 读取并解析JSON数据
        QByteArray jsonData = reply->readAll();
        QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);

        // 初始化列表(建议用栈对象,无需手动管理内存,若需持久化再用堆分配)
        QList<QString> names;

        // 检查是否为有效JSON数组
        if(jsonDoc.isArray()){
            QJsonArray jsonArray = jsonDoc.array();
            // 遍历数组内的每个对象
            for(const QJsonValue &val : jsonArray){
                if(val.isObject()){
                    QJsonObject obj = val.toObject();
                    // 校验name字段是否存在且为字符串类型
                    if(obj.contains("name") && obj["name"].isString()){
                        names.append(obj["name"].toString());
                    }
                }
            }
        }

        // 此处可添加对names列表的后续处理,比如打印、绑定UI等
        // qDebug() << "提取到的name列表:" << names;

        // 释放网络资源,避免内存泄漏
        reply->deleteLater();
        manager->deleteLater();
    });
}

关键细节说明:

  • 有效性校验:必须先判断jsonDoc.isArray()和val.isObject(),防止JSON结构不符合预期时程序崩溃
  • 字段合法性检查:用obj.contains("name")和obj["name"].isString()确保提取的是有效字符串值,避免类型错误
  • 内存优化:将names改为栈对象,减少内存管理负担;添加deleteLater()释放网络请求对象,避免内存泄漏

内容的提问来源于stack exchange,提问作者G06-Football

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:32:46