为什么我不能用Qt5 / C ++解析Cryptsy JSON API?

时间:2014-07-02 17:57:19

标签: c++ json parsing qt5 key-value

我尝试使用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之一)上尝试了完全相同的代码而没有任何问题。我完全被困在这里。

1 个答案:

答案 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数据?我正在试图弄清楚如何去做。