QJsonValue :: isUndefined无法正常工作

时间:2016-04-12 15:47:40

标签: json qt qt5

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonValue>
#include <QJsonObject>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    char json[] = "{ id: 12}";
    QJsonDocument doc = QJsonDocument::fromJson(json);
    QJsonValue v = doc.object()["no-defined"];
    Q_ASSERT(v.isUndefined());  // assert failed.

    return a.exec();
}

我想使用QJsonValue::isUndefined()来判断我是否定义了密钥,但在测试代码中,v.isUndefined()返回false,而不是true。我不知道原因,有什么解释吗?

1 个答案:

答案 0 :(得分:2)

运行测试后:

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    char json[] = "{ id: 12}";
    QJsonDocument doc = QJsonDocument::fromJson(json);
    QJsonValue v_ar = doc.object()["no-defined"];
    QJsonValue v_o = doc.object().value(QString("no-defined"));
    qDebug() << "Array-operator:" << v_ar.isUndefined() << v_ar.toString() << v_ar.type(); //returns: false ""
    qDebug() << "Object-operator:" << v_o.isUndefined() << v_o.toString(); //returns true ""
    qDebug() << "direct object call:" << doc.object().value("no-defined").isUndefined() << doc.object().value("no-defined").toString(); //returns true ""
    qDebug() << "direct array call:" << doc.object()["no-defined"].isUndefined() << doc.object()["no-defined"].toString(); //returns false ""
    return a.exec();
}

导致:

Array-operator: false "" 0
Object-operator: true ""
direct object call: true ""
direct array call: false ""

您可以看到数组运算符有问题。而不是返回JsonValue :: Undefined它返回一个JsonValue :: NULL(0)。一种方法是使用

QJsonValue v = doc.object().value("no-defined");

或更好:

Q_ASSERT(doc.object().value("no-defined").isUndefined());

根据QT-BUG,这意味着。如果调用数组运算符,则会创建一个默认值为NULL的新项。