自 OSX 上的 Qt 5.4 以来,QJsonDocument 解析中断?

QJsonDocument parsing broken since Qt 5.4 on OSX?

自从我升级到 Qt 5.4 后,我在解析 json 时遇到了问题。

这是一个例子:

#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: ""

I 运行 在 Mac OS X Yosemite 64 位上使用 clang 编译器。

有谁知道出了什么问题吗?

干杯, 曼罗门

看来是C++11的问题

正如 JKSH 所提到的,Qt 5.4 向构造函数添加了一个初始化列表。

我替换了:

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

与:

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

现在可以使用了。