我从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 :(得分:2)
要从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();
}
答案 1 :(得分:0)
要迭代基于索引的列表,您可以执行以下操作。
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"]