如何在Qt中从JSON文档提取名称并存入QList
提取QJsonDocument数组中的name字段到QList
直接修改你的lambda回调代码即可完成字段提取,步骤如下:
- 确认解析后的
QJsonDocument是数组类型,避免非法访问 - 遍历数组中的每个
QJsonObject - 检查每个对象是否包含有效的
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
相关产品推荐
相关产品推荐

