I am trying to do a simple programming to parse JSON message value from web to Qt Quick.
The JSON message would like to parse:
[
{
"id": 2,
"name": "yahoo",
"link": "http://www.yahoo.com/",
"created_by": "superadmin",
"create_time": "2015-03-12 14:45:21"
},
{
"id": 3,
"name": "Google",
"link": "http://www.google.com/",
"created_by": "superadmin",
"create_time": "2015-03-12 14:45:41"
},
{
"id": 4,
"name": "PS",
"link": "http://www.playstation.com",
"created_by": "superadmin",
"create_time": "2015-03-24 11:57:21"
}
]
The following is the Qt code main.cpp to try to parse these data:
#include <QGuiApplication>
#include <QStringList>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QtScript/QScriptEngine>
#include <QtScript/QScriptValueIterator>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <qqmlengine.h>
#include <qqmlcontext.h>
#include <qqml.h>
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickview.h>
#include <main.h>
QStringList Jsondata::datalistmethod() {
return datalist;
}
void Jsondata::onResult(QNetworkReply* reply)
{
QString data = (QString) reply->readAll();
QJsonDocument jsonResponse = QJsonDocument::fromJson(data.toUtf8());
QJsonObject jsonObject = jsonResponse.object();
foreach (const QJsonValue & value, jsonObject) {
QJsonObject obj = value.toObject();
datalist.append(obj["name"].toString());
datalist.append(obj["link"].toString());
}
}
int main(int argc, char ** argv)
{
QGuiApplication app(argc, argv);
Jsondata jsondata;
// Now parse this JSON according to your needs !
QNetworkAccessManager networkManager;
networkManager.setNetworkAccessible(QNetworkAccessManager::Accessible);
QUrl url("http://dbs.wasonicsystem.com/gta_test/api/web/v1/links");
QNetworkRequest request;
request.setUrl(url);
Jsondata::connect(&networkManager, SIGNAL(finished(QNetworkReply*)), &jsondata, SLOT(onResult(QNetworkReply*)));
networkManager.get(request); // GET
QStringList datalist;
datalist = jsondata.datalistmethod();
QQuickView view;
QQmlContext *ctxt = view.rootContext();
ctxt->setContextProperty("myModel", QVariant::fromValue(datalist));
view.setSource(QUrl("qrc:main.qml"));
view.show();
return app.exec();
}
main.h
#ifndef MAIN
#define MAIN
#include <QObject>
#include <QNetworkReply>
#include <QStringList>
class Jsondata : public QObject {
Q_OBJECT
QStringList datalist;
public slots:
void onResult (QNetworkReply*);
public:
QStringList datalistmethod();
};
#endif // MAIN
main.qml
import QtQuick 2.0
//![0]
ListView {
width: 100; height: 100
model: myModel
delegate: Rectangle {
height: 25
width: 100
Text { text: modelData }
}
}
//![0]
Results in: onResult still not called. so no datalist returned
I don't have knowledge on this QObject::connect
and don't know what wrong. I would appreciate it if you could help me to fix this bug.