2014-09-18 6 views
1

Dans mon application, j'utilise l'objet json pour obtenir le résultat de la base de données distante. Habituellement, chaîne de réponse ressemble à:Récupère la valeur de QJsonObject par index

{ 
    status:"ok", 
    data: [ 
     { field1:"value1", field2:"value2", field3:"value3" }, 
     { field1:"value4", field2:"value5", field3:"value6" }, 
     { field1:"value7", field2:"value8", field3:"value9" } 
    ] 
} 

Il semble bon et je peux obtenir la valeur de ligne/col speciified par:

QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8()); 
QJsonObject responseObject = jsonResponse.object(); 
if(responseObject.value("status").toString() == "ok") { 
    QJsonArray dataObject = responseObject.value("data").toArray(); 
    // and here I can get the value, for example 2-nd row, field2 
    QString value = dataObject.at(1).toObject().value("field2").toString(); 
} 

Mais parfois, je dois obtenir la valeur non par son nom mais par index. Ok, je suit:

QJsonObject obj = dataObject.at(1).toObject(); 
QString key = obj.keys().at(1); // I use index here instead of name 
QString value = obj.value(key).toString(); 

Mais malheureusement, il semble que l'ordre sur le terrain keys() ne conserve donc la clé d'index 0 ne sera pas exactement le premier champ dans son QJsonObject.

Donc ma question - comment puis-je obtenir le champ approprié de QJsonObject par index et pas seulement par nom?

Répondre

3

première suggestion: peut-être vous pouvez utiliser ce code à la place, ce qui est plus lisible

responseObject["status"].toString() == "ok" 

et voici peut-être votre suggestion de question

vous pouvez essayer iterator, le code ci-dessous juste l'exemple:

QJsonArray dataObject = responseObject["data"].toArray(); 
    QJsonArray::iterator it; 
    for (it = dataObject.begin(); it != dataObject.end(); it++) { 
     QString key = it->first; 
     QString value = it->second; 
    } 
Questions connexes