First time i find out this it took a while. But actually there is no
need any Additional code except QT itself, unless you want gain more
performance then QT standard library gives. So if you want to parse JSON
object first you have to include QT script engine.
#include <QScriptEngine>
Let say PHP returns something like this.
echo json_encode(array('result' => array(1,2,3)));
So C++ code looks like:
QByteArray result; result = QhttpClient->readAll(); QScriptValue sc; QScriptEngine engine; sc = engine.evaluate(QString(result)); // In new versions it may need to look like engine.evaluate("(" + QString(result) + ")"); if (sc.property("result").isArray()) { QStringList items; qScriptValueToSequence(sc.property("result"), items); foreach (QString str, items) { qDebug("value %s",str.toStdString().c_str()); } }
In this example this code writes something like:
value 1
value 2
value 3
values comes from generated PHP script. Let say php now gives us back something like:
echo json_encode(array('error' => false));
In this case just more simple syntax.
if (sc.property("error").toBoolean() == true) qDebug("Error detected"); else qDebug("All ok");
And finally most complex example witch should be ready to use for any purpose. Let say PHP gives something like this:
echo json_encode( array('result' => array ( array('id' => '1' ,'date' => '487847','nick' => 'Remigiijus'), array('id' => '1' ,'date' => '487847','nick' => 'remdex') ) ) );
In this case we must include additional file:
#include <QScriptValueIterator>
And let say we want to print nick names. So our C++ file will look like.
QByteArray result; result = QhttpClient->readAll(); QScriptValue sc; QScriptEngine engine; sc = engine.evaluate(QString(result));// In new versions it may need to look like engine.evaluate("(" + QString(result) + ")"); if (sc.property("result").isArray()) { QScriptValueIterator it(sc.property("result")); while (it.hasNext()) { it.next(); qDebug("Nick %s",it.value().property("nick").toString().toStdString().c_str()); } }
|