QJsonValue::isUndefined无法正常工作


#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。我不知道原因,有什么解释吗?

运行测试后:

#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 的新项。

相关内容

  • 没有找到相关文章

最新更新