Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QJsonDocument要在c+中列出或数组+;_C++_Arrays_Json_List_Qt - Fatal编程技术网

C++ QJsonDocument要在c+中列出或数组+;

C++ QJsonDocument要在c+中列出或数组+;,c++,arrays,json,list,qt,C++,Arrays,Json,List,Qt,我已经尝试过这段代码,但我不明白如何使用Qt获取json并在数组或列表中进行转换。 我的代码: QEventLoop eventLoop; QNetworkAccessManager mgr; QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); QNetworkRequest req(QUrl(QString("http://myurljson.com/ge

我已经尝试过这段代码,但我不明白如何使用Qt获取json并在数组或列表中进行转换。 我的代码:

QEventLoop eventLoop;


QNetworkAccessManager mgr;
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));


QNetworkRequest req(QUrl(QString("http://myurljson.com/getjson")));

QNetworkReply *reply = mgr.get(req);
eventLoop.exec(); // blocks stack until "finished()" has been called

if (reply->error() == QNetworkReply::NoError) {

    QString strReply = (QString)reply->readAll();    

    qDebug() << "Response:" << strReply;

    QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
    QJsonObject jsonObj = jsonResponse.object();

    qDebug() << "test:" << jsonObj["MCC_Dealer"].toString();
    qDebug() << "test1:" << jsonObj["MCC_User"].toString();

    delete reply;
}
else {
    //failure
    qDebug() << "Failure" <<reply->errorString();
    delete reply;
}
QEventLoop事件循环;
QNetworkAccessManager经理;
QObject::connect(&mgr,信号(完成(QNetworkReply*)),&eventLoop,插槽(退出());
QNetworkRequest请求(QUrl)(QString(“http://myurljson.com/getjson")));
QNetworkReply*reply=manager.get(req);
eventLoop.exec();//阻止堆栈,直到调用“finished()”
如果(回复->错误()==QNetworkReply::NoError){
QString streply=(QString)reply->readAll();

qDebug()正如我在评论中提到的,您的JSON响应已经是一个数组,因此您不需要创建额外的结构来存储您获得的数据。为了反序列化您的数据,您可以执行以下操作:

[..]
QJsonArray jsonArray = jsonResponse.array();

for (auto it = jsonArray.constBegin(); it != jsonArray.constEnd(); ++it)
{
    const QJsonValue &val = *it;

    // We expect that array contains objects like:
    // {"MCC_Dealer":'test',"MCC_User":'test',"CurrentDealer":'test',"CurrentUser":'test'}
    QJsonObject o = val.toObject();

    // Iterate over all sub-objects. They all have string values.
    for (auto oIt = o.constBegin(); oIt != o.constEnd(); ++oIt)
    {
        // "MCC_Dealer":'test'
        qDebug() << "Key:" << oIt.key() << ", Value:" << oIt.value().toString();
    }
}
[…]
QJsonArray-jsonArray=jsonResponse.array();
for(auto-it=jsonArray.constBegin();it!=jsonArray.constEnd();+it)
{
常量QJsonValue&val=*it;
//我们希望数组包含以下对象:
//{“MCC_经销商”:“测试”、“MCC_用户”:“测试”、“当前经销商”:“测试”、“当前用户”:“测试”}
QJsonObject o=val.toObject();
//迭代所有子对象。它们都有字符串值。
对于(自动oIt=o.constBegin();oIt!=o.constEnd();++oIt)
{
//“MCC_经销商”:“测试”

qDebug()正如我在评论中提到的,您的JSON响应已经是一个数组,因此您不需要创建额外的结构来存储您获得的数据。为了反序列化您的数据,您可以执行以下操作:

[..]
QJsonArray jsonArray = jsonResponse.array();

for (auto it = jsonArray.constBegin(); it != jsonArray.constEnd(); ++it)
{
    const QJsonValue &val = *it;

    // We expect that array contains objects like:
    // {"MCC_Dealer":'test',"MCC_User":'test',"CurrentDealer":'test',"CurrentUser":'test'}
    QJsonObject o = val.toObject();

    // Iterate over all sub-objects. They all have string values.
    for (auto oIt = o.constBegin(); oIt != o.constEnd(); ++oIt)
    {
        // "MCC_Dealer":'test'
        qDebug() << "Key:" << oIt.key() << ", Value:" << oIt.value().toString();
    }
}
[…]
QJsonArray-jsonArray=jsonResponse.array();
for(auto-it=jsonArray.constBegin();it!=jsonArray.constEnd();+it)
{
常量QJsonValue&val=*it;
//我们希望数组包含以下对象:
//{“MCC_经销商”:“测试”、“MCC_用户”:“测试”、“当前经销商”:“测试”、“当前用户”:“测试”}
QJsonObject o=val.toObject();
//迭代所有子对象。它们都有字符串值。
对于(自动oIt=o.constBegin();oIt!=o.constEnd();++oIt)
{
//“MCC_经销商”:“测试”

qDebug()您的JSON响应是一个数组。数组的每个元素都有四个JSON对象,具有字符串值:“MCC_Dealer”、“MCC_User”、“CurrentDealer”、“CurrentUser”。请澄清,您希望如何将它们存储在列表中。每一行都是一个对象,我想将其放入对象列表中,例如list obj=new list();以及obj.add(line1);等等..我来自c#但我想在c++中这样做,但是您已经有了一个
QJsonArray
来存储所提到的每个对象。为什么需要另一个结构(列表)来存储它们呢?如果您编写
QJsonArray jsonArray=jsonResponse.array()
我想你会得到你需要的。工作!要调用属性,从第一个元素开始,我执行jsonArray[0]['MCC\u Dealer']?你的JSON响应是一个数组。数组的每个元素都有四个JSON对象,它们的字符串值为:“MCC\u Dealer”、“MCC\u User”、“CurrentDealer”、“CurrentUser”。请澄清,您希望如何将它们存储在列表中。每行都是一个对象,我希望将其放入对象列表中,例如list obj=new list();以及obj.add(line1);等等..我来自c#但我想在c++中这样做,但是您已经有了一个
QJsonArray
来存储所提到的每个对象。为什么需要另一个结构(列表)来存储它们呢?如果您编写
QJsonArray jsonArray=jsonResponse.array()
我想你会得到你所需要的。工作!要调用属性,从第一个元素开始,我做jsonArray[0]['MCC_Dealer']?回答正确。!是否可以直接调用一个属性?例如,如果我调用jsonArray[0]。key(“MCC_Dealer”)?或类似的东西。我想是的,但方式不同:
jsonArray[0]。toObject()。查找(“MCC_Dealer”)。key()
差不多。但我不建议这样做,因为这样做不会检查每个函数调用返回值的正确性,在某些情况下可能会失败。调用属性的解决方案是:在对象中转换,QJsonObject temp=jsonarray[n].toObject();在调用temp.value(“yourvalue”).toString()之后-这很有效。谢谢回答正确。!是否可以直接调用一个属性?例如,如果我调用jsonArray[0]。键(“MCC_经销商”)?或类似。我认为可以,但方式不同:
jsonArray[0]。toObject()。find(“MCC_经销商”)。键()
差不多。但我不建议这样做,因为这样你就不会检查每个函数调用返回的值的正确性,在某些情况下可能会失败。调用属性的解决方案是:在对象中转换,QJsonObject temp=jsonarray[n].toObject();在调用temp.value(“yourvalue”).toString();-这很有效。谢谢