要解析你提供的JSON字符串,可以使用Qt的QJsonDocument
、QJsonObject
和QJsonArray
类。这些类提供了方便的方法来处理JSON数据。
以下是一个示例代码,演示如何解析给定的JSON字符串并提取相应的数据:
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QString>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 你的 JSON 字符串
std::string str = R"({"device_id":"673db461ef99673c8acec2c4_home_3861","shadow":[{"service_id":"attribute","desired":{"properties":null,"event_time":null},"reported":{"properties":{"buzzer":"OFF","fan":"OFF","led":"OFF","humidity":38,"temperature":22,"light":0,"proximity":0,"co_value":871,"infrared":0},"event_time":"20241126T050051Z"},"version":3058}]})";
// 将 std::string 转换为 QString
QString jsonString = QString::fromStdString(str);
// 解析 JSON 字符串
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());
if (jsonDoc.isNull()) {
qDebug() << "Failed to create JSON doc.";
return -1;
}
// 确保文档是对象类型
if (!jsonDoc.isObject()) {
qDebug() << "JSON is not an object.";
return -1;
}
QJsonObject jsonObj = jsonDoc.object();
// 获取 device_id
QString deviceId = jsonObj["device_id"].toString();
qDebug() << "Device ID:" << deviceId;
// 获取 shadow 数组
QJsonArray shadowArray = jsonObj["shadow"].toArray();
for (const auto& item : shadowArray) {
QJsonObject shadowObj = item.toObject();
// 获取 reported 对象
QJsonObject reportedObj = shadowObj["reported"].toObject();
// 获取 properties 对象中的值
QJsonObject propertiesObj = reportedObj["properties"].toObject();
QString buzzerState = propertiesObj["buzzer"].toString();
QString fanState = propertiesObj["fan"].toString();
QString ledState = propertiesObj["led"].toString();
int humidityValue = propertiesObj["humidity"].toInt();
int temperatureValue = propertiesObj["temperature"].toInt();
qDebug() << "Buzzer:" << buzzerState;
qDebug() << "Fan:" << fanState;
qDebug() << "LED:" << ledState;
qDebug() << "Humidity:" << humidityValue;
qDebug() << "Temperature:" << temperatureValue;
// 其他属性可以按照需求继续获取...
}
return a.exec();
}
在这个例子中,我们首先将标准字符串转换为 QString
。然后,我们用 QJsonDocument::fromJson()
函数将其解析成 JSON 文档。如果解析成功,我们进一步提取 device_id
和 shadow
数组中的信息,最终打印出相关内容。
确保包含必要的头文件,并在你的项目中链接 Qt 的核心和网络模块(如果需要)。
内容由零声教学AI助手提供,问题来源于学员提问