Синтаксический анализ QJsonDocument, начиная с Qt 5.4 на OSX?

У меня проблемы с синтаксическим анализом json, так как я обновился до Qt 5.4.

Вот пример:

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

Если я запускаю это с использованием Qt 5.3, то все в порядке. Выход:

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

Если я запускаю это с использованием Qt 5.4, я получаю это:

results.count: 1
v: ""

Я запускаю это на Mac OS X Yosemite 64-Bit с компилятором clang.

Кто-нибудь знает, что не так?

Ура,
Manromen

0

Решение

Так что, похоже, проблема с C ++ 11.

Как упомянуто JKSH, Qt 5.4 добавил список инициализатора в конструктор.

Я заменил:

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

с:

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

Теперь это работает.

0

Другие решения


По вопросам рекламы [email protected]