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": true, "properties": [ { "ID": 1001, "PropertyName": "McDonalds", "key": "00112233445566778899aabbccddeeff" }, { "ID": 1002, "PropertyName": "Burger King", "key": "10112233445566778899aabbccddeeff" }, { "ID": 1003, "PropertyName": "Taco Bell", "key": "20112233445566778899aabbccddeeff" } ] }
How can I create three arrays that contain properties[x].ID, properties[x].PropertyName, and properties[x].key in Qt?
Edit:
Using QScriptEngine I tried this:
QString data = (QString)reply->readAll(); QScriptEngine engine; QScriptValue result = engine.evaluate(data); qDebug() << result.toString();
Debug is saying "SyntaxError: Parse error"
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.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