我尝试使用Qtson和C ++使用QJsonDocument和QJsonObject解析this JSON Web-API,如here所示。但是我无法访问QJsonObject的JSON值。
这是我迄今为止所尝试过的:
// Contains the whole API as QString...
QString data = QString(reply->readAll());
// Reads the JSON as QJsonDocument...
QJsonDocument jsonResponse = QJsonDocument::fromJson(data.toUtf8());
// Reads the JSON as QJsonObject...
QJsonObject jsonObject = jsonResponse.object();
现在我准备好了我的对象,但尝试访问JSON的值却失败了:
// This returns an empty string ""!?!
qDebug() << jsonObject.value("success").toString();
好吧,也许我弄错了键:
// Let's check the keys...
QStringList stringList = jsonObject.keys();
for (QStringList::Iterator it = stringList.begin(); it != stringList.end(); ++it)
{
// This returns "success" and "return" - huh!?!
qDebug() << *it;
}
好的,钥匙已经搞定了,为什么它不起作用?
// Let's check the values by using the keys directly...
for (QStringList::Iterator it = stringList.begin(); it != stringList.end(); ++it)
{
// This returns empty strings "" and "" - now what?!?
qDebug() << jsonObject.value(*it).toString();
}
这再次毫无意义。我无法理解为什么我无法通过键访问JSON对象的值。有什么想法吗?
我在其他JSON API(例如this之一)上尝试了完全相同的代码而没有任何问题。我完全被困在这里。
答案 0 :(得分:2)
这是我的Qt5 Json解析Cryptsy API的解决方案。
QEventLoop loopEvent;
QNetworkAccessManager namMNGR;
QObject::connect(&namMNGR, SIGNAL(finished(QNetworkReply*)), &loopEvent, SLOT(quit()));
QNetworkRequest req(QUrl(QString("http://pubapi.cryptsy.com/api.php?method=singlemarketdata&marketid=%1").arg(marketID)));
QNetworkReply *reply = namMNGR.get(req);
loopEvent.exec();
//Json API parsing begins.
QString jsonSTR = reply->readAll();
if (!(reply->error() == QNetworkReply::NoError)) {
delete reply; //API Connection Problem.
}
QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonSTR.toUtf8());
QJsonObject obj1 = jsonDocument.object();
QJsonValue val1 = obj1.value(obj1.keys().first());
QJsonObject obj2 = val1.toObject();
QJsonValue val2 = obj2.value(obj2.keys().first());
QJsonObject obj3 = val2.toObject();
QJsonValue marketDataValue = obj3.value(obj3.keys().first());
QJsonObject marketDataObject = marketDataValue.toObject();
QJsonArray sellordersArray = marketDataObject["sellorders"].toArray();
您是否设法从Qt5获取经过身份验证的POST API数据?我正在试图弄清楚如何去做。