Search code examples
jsonqtsymbianqjson

JSON in Qt using QVariantMap


I would like to parse this JSON output in a symbian application:

[
    {"ID":"9","titel":"wouter","plaatsID":"2616","prio":"3"},
    {"ID":"8","titel":"pasta","plaatsID":"3780","prio":"3"},
    {"ID":"6","titel":"Muts prikken","plaatsID":"3780","prio":"2"
    {"ID":"5","titel":"doorplannen","plaatsID":"3840","prio":"2"}
    {"ID":"4","titel":"Gasfles","plaatsID":"3780","prio":"2"}
]

For this, I wrote following code, but I can't read the data. Other single JSON output it works fine, but a multiple output doesn't work:

     void start::finishedSlot(QNetworkReply * reply)
    {
        // Reading attributes of the reply
        // e.g. the HTTP status code
        reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
    // see CS001432 on how to handle this
    // no error received?
    if (reply->error() == QNetworkReply::NoError)
    {
            QByteArray data = reply->readAll();
        bool ok;
        QVariantMap result = Json::parse(QString(data), ok).toMap();

        if(!ok) {
            qFatal("An error occurred during parsing");
            exit(1);
        }
        QMapIterator<QString, int> i(result);
        while (i.hasNext()) {
            i.next();
            cout << i.key() << ": " << i.value() << endl;
        }

    ui->log->setText("het gaat goed");
    }
    // Some http error received
    else
    {
     ui->log->setText("gaat NIET goed");
    }
    delete reply;
}

Solution

  • void parse_links(const QScriptValue & value, QList<Link> & cbk_links)
    {
        QList<QVariantMap> list;
        qScriptValueToSequence(value,list);
        foreach(auto item, list)
        {
            Link link;
    
            link.yawDeg = item.value("yawDeg").toFloat();
            link.panoId = item.value("panoId").toString();
            link.road_argb = item.value("road_argb").toString();
            link.description = item.value("description").toString();
            link.scene = item.value("scene").toInt();
    
            cbk_links.append(link);
        }
    }
    

    used for passing:

    "Links":    [
                {   "yawDeg":"18.49",
                    "panoId":"Voal3KQo5FNL67hq7tA8nA",
                    "road_argb":"0x80ffffff",
                    "description":"Knuth-Wintherfeldts Allé",
                    "scene":"0"
                },          {   "yawDeg":"198.49",
                    "panoId":"6RCsAsNoawmh98eOOs7Wzw",
                    "road_argb":"0x80ffffff",
                    "description":"Knuth-Wintherfeldts Allé",
                    "scene":"0"
                }
            ]