2015-01-21 7 views
0

Qt 5.4로 업그레이드 한 이후 json 파싱에 문제가 있습니다. 나는이 Qt는 5.3을 사용하는 모든 괜찮 실행하면OSX에서 Qt 5.4부터 QJsonDocument 구문 분석이 중단 되었습니까?

#include <QCoreApplication> 

#include <QJsonDocument> 
#include <QJsonObject> 
#include <QJsonArray> 

#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    char jsString[] { 
     "{\"results\":[{\"id\":1,\"title\":\"Test1\"},{\"id\":2,\"title\":\"" 
     "Test2\"},{\"id\":3,\"title\":\"Test3\"},{\"id\":4,\"title\":\"Test4\"}]}" 
    }; 

    QJsonParseError *error { nullptr }; 
    // parse bytes to json 
    QJsonDocument doc { QJsonDocument::fromJson(jsString, error) }; 

    if (error) { 
     qDebug() << "error parsing json:" << error->errorString(); 
    } else { 

     QJsonObject rootObj { doc.object() }; 
     QJsonArray results { rootObj.value("results").toArray() }; 

     qDebug() << "results.count:" << results.count(); 

     for (QJsonValue v : results) { 
      qDebug() << "v:" << v.toObject().value("title").toString(); 
     } 
    } 
    return a.exec(); 
} 

: 여기

은 예입니다. 출력은 다음과 같습니다

results.count: 1 
v: "" 

나는 그 소리 컴파일러와 맥 OS X 요세미티 64 비트에서이 작업을 실행

results.count: 4 
v: "Test1" 
v: "Test2" 
v: "Test3" 
v: "Test4" 

나는이 사용 Qt는 5.4을 실행하면 나는이 얻을.

누구에게 아이디어가 잘못 되었나요?

건배, Manromen

답변

0

는 그래서 C++ 11 문제가 될 것으로 보인다.

JKSH에서 언급 한 것처럼 Qt 5.4는 생성자에 초기화 프로그램 목록을 추가했습니다.

나는 대체 :

QJsonArray results { rootObj.value("results").toArray() }; 

로 :

QJsonArray results = rootObj.value("results").toArray(); 

지금이 일하고있다.

+0

C++ 11에서는 문제가되지 않습니다. 그것은 [문서화 된 동작] (http://doc.qt.io/qt-5/qjsonarray.html#QJsonArray-2)입니다. initializer-list를 사용하면 첫 번째 배열을 단일 QJsonValue로 변환합니다. 따라서 * results *는 배열 배열이됩니다. Qt 5.3에서 본 동작은 버그가 있습니다. – JKSH