2014-09-18 7 views
1

내 응용 프로그램에서 json 개체를 사용하여 원격 데이터베이스에서 결과를 얻습니다. 그것은 외모와 I에 의해 speciified 행/COL에서 값을 얻을 수 있습니다인덱스로 QJsonObject에서 값 가져 오기

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

:

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(); 
} 

하지만 가끔은 내가하지 이름이 아니라 인덱스 값을 얻을 필요가 같이 일반적으로 응답 문자열 보인다.

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(); 

을하지만 불행히도 그것은 keys()가되지는 QJsonObject에서 첫 번째 필드가 될 것 인덱스 0 정확히 너무 키 필드의 순서를 유지하는 것이 보인다 : 좋아, 나는 다음을 수행합니다.

내 질문 - 색인에 의해 QJsonObject에서 적절한 필드를 얻는 방법은 무엇입니까?

답변

3

먼저 제안 : 어쩌면 당신이 더 많은 읽을 대신에이 코드를 사용할 수 있습니다

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

여기가 귀하의 질문에 제안 어쩌면

당신이 반복자를 시도 할 수 있습니다, 아래의 코드를 그냥 예입니다 :

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