2016-12-09 12 views
0

はqt5を使用してJSONなぜこのjsonをqtで解析できないのですか?

を解析しようとここに機能です:JSON QSTRINGはこのようになります

void MainWindow::parse(QString &json){ 

    QJsonDocument doc(QJsonDocument::fromJson(json.toUtf8())); 
    QJsonObject obj = doc.object(); 
    QJsonArray result = obj["results"].toArray(); 
    QJsonValue location =result.at(0); 
    QJsonValue now = result.at(1); 
    QJsonValue time = result.at(2); 
    cityName = location.toObject().take("name").toString(); 
    status = now.toObject().take("text").toString(); 
    qDebug()<<time.toString(); // this qdebug is for testing 
} 

{ 
    "results": [ 
     { 
      "location": { 
       "id": "WX4FBXXFKE4F", 
       "name": "北京", 
       "country": "CN", 
       "path": "北京,北京,中国", 
       "timezone": "Asia/Shanghai", 
       "timezone_offset": "+08:00" 
      }, 
      "now": { 
       "text": "晴", 
       "code": "0", 
       "temperature": "-4" 
      }, 
      "last_update": "2016-12-09T23:25:00+08:00" 
     } 
    ] 
} 

私はqDebugからの出力は"2016-12-09T23:25:00+08:00"ことを期待それだけです""

citynameおよびstatus""に設定されています。

ここで何が間違っていますか?ありがとう!

+1

は、あなたが( 'result.sizeを調べてもらってください)' ? 'QJsonDocument :: fromJson'で' QJsonParseError * error'を渡してチェックしようとしましたか? – Jarod42

+1

デバッガでコードをステップ実行し、変数値を調べます。それで分からない場合は、各ステートメントの間にデバッグ・プリントを追加し、そのコードで質問を編集すれば完全な出力になります。 – hyde

答えて

3

JSON文字列の"results"はオブジェクトの配列で、各オブジェクトは"location","now"、および"last_update"のキーを持っています。 "location""now"はそれぞれ異なるキーを持つJSONオブジェクトです。

それが配列であるかのようにあなたは結果オブジェクトにアクセスしている、あなたが探している値を取得するためにキーを使用して、それをオブジェクトとしてアクセスする必要がありますが:

QJsonDocument doc(QJsonDocument::fromJson(jsonByteArray)); 
QJsonObject obj = doc.object(); 
QJsonArray results = obj["results"].toArray(); 
//get the first "result" object from the array 
//you should do this in a loop if you are looking for more than one result 
QJsonObject firstResult= results.at(0).toObject(); 
//parse "location" object 
QJsonObject location= firstResult["location"].toObject(); 
QString locationId= location["id"].toString(); 
QString locationName= location["name"].toString(); 
QString locationCountry= location["country"].toString(); 
QString locationPath= location["path"].toString(); 
QString locationTimeZone= location["timezone"].toString(); 
QString locationTimeZoneOffset= location["timezone_offset"].toString(); 
//parse "now" object 
QJsonObject now= firstResult["now"].toObject(); 
QString nowText= now["text"].toString(); 
QString nowCode= now["code"].toString(); 
QString nowTemperature= now["temperature"].toString(); 
//parse "last_update" 
QString lastUpdate= firstResult["last_update"].toString(); 
関連する問題