2016-12-09 8 views
0

с помощью qt5 и пытается разобрать JSONПочему этот json не разбирается в qt?

вот функция:

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 
} 

JSON QString выглядит следующим образом:

{ 
    "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()' ? Вы пытаетесь передать и проверить 'QJsonParseError * error' в' QJsonDocument :: fromJson'? – 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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^