Qt parsing JSON using QJsonDocument, QJsonObject, QJsonArray

匿名 (未验证) 提交于 2019-12-03 01:12: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": 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"

回答1:

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()); }


回答2:

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  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!