ZBLOG

qt 解析出{"buzzer":"OFF","fan":"OFF","led":"OFF","humidity":38,"temperature":22,"light":0,"proximity":0,"co_value":871,"infrared":0}中内容 {"device_id":"673db461ef99673c8acec2c4_home_3861","shadow":[{"service_id":"attribute","desired":{"properties":nu...

在Qt中解析JSON数据可以使用QJsonDocument, QJsonObjectQJsonArray类。下面是一个示例代码,展示如何解析你提供的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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=6693

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?