在Qt中解析JSON数据可以使用QJsonDocument
, QJsonObject
和QJsonArray
类。下面是一个示例代码,展示如何解析你提供的JSON字符串。
首先确保你的项目文件(.pro)中包含以下模块:
QT += core
QT -= gui
然后,可以使用以下代码来解析你的JSON数据:
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
void parseJson(const QString &jsonString) {
// 将字符串转换为字节数组,然后创建 QJsonDocument
QByteArray jsonData = jsonString.toUtf8();
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
// 检查文档是否有效
if (jsonDoc.isNull()) {
qWarning() << "Failed to create JSON doc.";
return;
}
// 确保是对象类型
if (!jsonDoc.isObject()) {
qWarning() << "JSON is not an object.";
return;
}
// 获取根对象
QJsonObject rootObj = jsonDoc.object();
// 访问 device_id
QString deviceId = rootObj.value("device_id").toString();
qDebug() << "Device ID:" << deviceId;
// 访问 shadow 数组
QJsonArray shadowArray = rootObj.value("shadow").toArray();
for (const QJsonValue &value : shadowArray) {
QJsonObject shadowObj = value.toObject();
// 获取 service_id 和 version
QString serviceId = shadowObj.value("service_id").toString();
int version = shadowObj.value("version").toInt();
qDebug() << "Service ID:" << serviceId;
qDebug() << "Version:" << version;
// 获取 reported 对象
QJsonObject reportedObj = shadowObj.value("reported").toObject();
// 访问 properties 对象中的内容
QJsonObject propertiesObj = reportedObj.value("properties").toObject();
qDebug() << "Buzzer:" << propertiesObj.value("buzzer").toString();
qDebug() << "Fan:" << propertiesObj.value("fan").toString();
qDebug() << "LED:" << propertiesObj.value("led").toString();
// 更多属性...
int humidity = propertiesObj.value("humidity").toInt();
int temperature = propertiesObj.value("temperature").toInt();
qDebug() << "Humidity:" << humidity;
qDebug() << "Temperature:" << temperature;
// 继续获取其他属性...
double coValue = propertiesObj.value("co_value").toDouble();
double proximityValue= propertiesObj.value(“proximity”).toDouble();
...
}
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString jsonData =
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}]} )";
parseJson(jsonData);
return a.exec();
}
在这个示例中,我们定义了一个parseJson
函数,用于解析传入的JSON字符串。我们从根对象开始,获取设备ID、shadow数组和每个shadow的相关信息。在此过程中,我们也提取了各个状态值(如buzzer、fan等)。
请将你的JSON数据作为参数传递给该函数,即可打印出各个字段的值。
内容由零声教学AI助手提供,问题来源于学员提问