Qt parsing JSON using QJsonDocument, QJsonObject, QJsonArray

后端 未结 2 2005
既然无缘
既然无缘 2020-12-07 17:01

I\'m using Qt5. I am trying to obtain values from a json object. Here is what the json object looks like that I am trying to get data from:

{
    \"success\"         


        
相关标签:
2条回答
  • 2020-12-07 17:48

    Here is an example from How To Manipulate JSON With C++ and Qt.

    // reads a json file from disk to QVariantMap
    // originally from http://erickveil.github.io/2016/04/06/How-To-Manipulate-JSON-With-C++-and-Qt.html
    bool readJsonFile(std::string file_path, QVariantMap& result)
    {
        // step 1
        QFile file_obj(QString::fromStdString(file_path));
        if (!file_obj.open(QIODevice::ReadOnly)) {
        std::cout << "Failed to open " << file_path << std::endl;
        exit(1);
        }
    
        // step 2
        QTextStream file_text(&file_obj);
        QString json_string;
        json_string = file_text.readAll();
        file_obj.close();
        QByteArray json_bytes = json_string.toLocal8Bit();
    
        // step 3
        auto json_doc = QJsonDocument::fromJson(json_bytes);
    
        if (json_doc.isNull()) {
            std::cout << "Failed to create JSON doc." << std::endl;
            return false;
        }
        if (!json_doc.isObject()) {
            std::cout << "JSON is not an object." << std::endl;
            return false;
        }
    
        QJsonObject json_obj = json_doc.object();
    
        if (json_obj.isEmpty()) {
            std::cout << "JSON object is empty." << std::endl;
            return false;
        }
    
        // step 4
        result = json_obj.toVariantMap();
        return true;
    }
    
    // writes a QVariantMap to disk
    bool writeJsonFile(QVariantMap point_map, std::string file_path)
    {
        QJsonObject json_obj = QJsonObject::fromVariantMap(point_map);
        QJsonDocument json_doc(json_obj);
        QString json_string = json_doc.toJson();
    
        QFile save_file(QString::fromStdString(file_path));
        if (!save_file.open(QIODevice::WriteOnly)) {
            std::cout << "failed to open save file" << std::endl;
            return false;
        }
        save_file.write(json_string.toLocal8Bit());
        save_file.close();
        return true;
    }
    
    0 讨论(0)
  • 2020-12-07 17:50

    I figured it out:

    QStringList propertyNames;
    QStringList propertyKeys;
    QString strReply = (QString)reply->readAll();
    QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
    QJsonObject jsonObject = jsonResponse.object();
    QJsonArray jsonArray = jsonObject["properties"].toArray();
    
    foreach (const QJsonValue & value, jsonArray) {
        QJsonObject obj = value.toObject();
        propertyNames.append(obj["PropertyName"].toString());
        propertyKeys.append(obj["key"].toString());
    }
    
    0 讨论(0)
提交回复
热议问题