Я начинаю с QT, и это кошмар, чтобы получить данные обратно из php (чтобы отправить результат mysql)
Сторона PHP:
...
$rs = mysql_query( $sql );
while ($row = mysql_fetch_assoc($rs)) {
$result[] = $row;
}
echo json_encode(array('code'=>'OK', 'result' => $result));
Ведьмы дают следующий результат:
{"code":"OK","result":
[{"CCMGD_HOUR":"19980","CCMGD_DAY":"3"},
{"CCMGD_HOUR":"32400","CCMGD_DAY":"3"},
{"CCMGD_HOUR":"71100","CCMGD_DAY":"3"},
{"CCMGD_HOUR":"71700","CCMGD_DAY":"3"},
{"CCMGD_HOUR":"72000","CCMGD_DAY":"3"}]}
Теперь, сторона QT:
...
QNetworkReply* reply;
QString data = (QString) reply->readAll();
QJsonDocument d = QJsonDocument::fromJson(data.toUtf8());
QJsonObject jo = d.object();
QVariantHash hash = jo.toVariantHash();
QVariantList list = hash.value("result").toList();
Но после ??? Если я хорош в этом пункте, как перебрать проблемные строки и извлечь ключи (CCMGD_HOUR и CCMGD_DAY)?
Я нахожу, как перебрать:
foreach(const QVariant &item, result){
...//but item has 2 items for the row:
[0]
key "CCMGD_HOUR"value "19980"[1]
key "CCMGD_DAY"value "3"
how to extract this ?
}
Спасибо !
Чтобы извлечь значения из Json, попробуйте это
QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
QJsonObject jo = document.object();
foreach (const QJSonValue& value, jo["result"].toArray()) {
QJsonObject obj = value.toObject();
qDebug() << "CCMGD_HOUR: " << obj["CCMGD_HOUR"].toInt();
qDebug() << "CCMGD_DAY: " << obj["CCMGD_DAY"].toInt();
}
Чтобы выполнить итерацию по списку на основе индекса, вы можете сделать следующее.
for (i = list.begin(); i != list.end(); ++i)
или же
for (int i = 0; i < list.size(); ++i)
В вашем случае, возможно, вам следует использовать map
объект вместо (его ассоциативный массив).
QVariant
как toMap
метод: http://doc.qt.io/qt-5/qvariant.html#toMap
Затем вы можете получить доступ к объекту карты, так же, как в PHP
с ассоциированным массивом: например list["result"][0]["CCMGD_HOUR"]