Qt parsing JSON using QJsonDocument, QJsonObject, QJsonArray
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());}
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.htmlbool 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 diskbool 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;}