QT 解析json数组
时间: 2025-01-02 20:32:00 浏览: 7
### 如何在 QT 中解析 JSON 数组
#### 使用 `QJsonDocument` 和 `QJsonArray`
为了有效地解析 JSON 数据,在 C++ Qt 项目中可以利用 `QJsonDocument` 类来加载整个 JSON 文档,并通过 `QJsonArray` 来访问数组元素。一旦确认文档确实表示一个数组,则可以通过迭代器遍历该数组并获取各个项的具体值。
下面展示了一个具体的实现方法:
```cpp
#include <QCoreApplication>
#include <QDebug>
#include <QStringList>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonValue>
void parseJsonArray(const QByteArray& response){
QStringList jsonArray;
QJsonDocument jsonResponse = QJsonDocument::fromJson(response);
if (!jsonResponse.isArray()){
qDebug() << "Error: Response is not an array";
return;
}
QJsonArray arr = jsonResponse.array();
for (auto&& value : arr){ // Range-based for loop since Qt 5.7+
QString element = value.toString();
jsonArray.append(element);
}
}
```
这段代码首先创建了一个名为 `parseJsonArray` 的函数,接受字节数组形式的输入作为参数[^2]。接着定义了一个字符串列表用于存储从 JSON 数组转换而来的字符串集合。随后调用了 `QJsonDocument::fromJson()` 方法将传入的数据流转化为 `QJsonDocument` 对象;如果返回的对象不是一个有效的 JSON 数组则输出错误信息并退出函数执行流程。最后当验证成功后会继续操作,把每一个成员都转成字符串追加到之前准备好的容器里去完成最终目的。
对于更复杂的嵌套结构如提供的歌词例子,可做如下调整以便于处理对象内的特定字段:
```cpp
// 假设response包含了完整的JSON数据串
QByteArray jsonString = R"({
"data": [
{"TextResult":"匆匆那年..."},
...
],
"errorMsg": "...",
"result": "..."
})";
QJsonDocument doc(QJsonDocument::fromJson(jsonString));
if(doc.isObject()){
auto obj = doc.object();
if(obj.contains("data") && obj["data"].isArray()){
QJsonArray dataArray = obj["data"].toArray();
foreach(const QJsonValue &value, dataArray){
if(value.toObject().contains("TextResult")){
qDebug()<<value.toObject()["TextResult"].toString();
}
}
}
}
```
此部分展示了如何深入一层级读取 `"data"` 键下的多个子对象,并从中提取指定键名对应的文本内容[^3]。
阅读全文