QT5: лучший эффективный способ «десериализации» массив ключей / значений из результата json

Я начинаю с 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 ?
}

Спасибо !

0

Решение

Чтобы извлечь значения из 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();
}
2

Другие решения

Чтобы выполнить итерацию по списку на основе индекса, вы можете сделать следующее.

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"]

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector