ZBLOG

{\"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,...

你提供的字符串是一个无效的JSON格式,因为它由两个JSON对象直接连接在一起,而没有使用逗号或其他符号分隔。

为了处理这个问题,我们可以将字符串拆分为两个有效的JSON对象。假设这两个JSON对象相同,你可以选择解析其中一个。在这里,我会给出如何解析第一个JSON对象的示例代码。

以下是一个Qt示例代码,演示了如何处理并解析第一个有效的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();
}

在这个示例中,我们只处理第一个有效的JSON字符串。如果需要解析第二个相同的对象,你可以将其单独存储并再次进行类似的处理。

注意事项:

  1. 有效性:确保传入的字符串格式正确,应该只有一个完整且有效的JSON。
  2. 错误处理:在实际应用中,应当考虑更多错误处理,例如检查数据是否存在等。


    内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?