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