我应该从服务器接收一个QJsonObject
,它将包含一个名称为“List”的QJsonObject
或QJsonArray
。我的意思是,“列表”可以是QJsonObject
或QJsonArray
。那么如何检查“列表”是QJsonObject
还是QJsonArray
?
收到的QJsonDocument
可能是以下两种写格式之一
1)这里的“列表”是一个QJsonArray
{
"Data":
{
"List":
[
{
"name": "something",
"id": "number"
},
{
"name": "something",
"id": "number"
},
{
"name":"something",
"id": "number"
}
]
}
}
2)这里的“列表”是一个
QJsonObject
{
"Data":
{
"List":
{
"name": "something",
"id": "number"
}
}
}
提前致谢。任何帮助,将不胜感激。
最佳答案
第一个采样的json无效,因此我将等待您更正它以指出正确的测试,而第二个仅缺少逗号。但是,当您访问QJsonObject
或QJsonArray
的字段时,它会返回QJsonValueRef
,它是处理多种类型数据的助手,并且您知道它是QJsonObject
还是QJsonArray
,您必须使用 isObject()
或 isArray()
方法:
const QByteArray json = R"(
{
"Data": {
"List": {
"name": "something",
"id": "number"
}
}
}
)";
QJsonDocument doc = QJsonDocument::fromJson(json);
QJsonObject obj = doc.object();
QJsonValueRef list_ref = doc["Data"].toObject()["List"];
if(list_ref.isObject())
qDebug()<< list_ref <<"is Object";
else if (list_ref.isArray()) {
qDebug()<< list_ref << "is array";
}
输出:
QJsonValue(object, QJsonObject({"id":"number","name":"something"})) is Object
而在第一个示例中,您想要显示以下有效的json:
{
"Data": {
"List": [{
"name": "something",
"id": "number"
}, {
"name": "something",
"id": "number"
}, {
"name": "something",
"id": "number"
}]
}
}
如果使用相同的方法,则会得到:
QJsonValue(array, QJsonArray([{"id":"number","name":"something"},{"id":"number","name":"something"},{"id":"number","name":"something"}]))
is array
关于c++ - 测试它是Qt中的QJsonObject还是QJsonArray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52590131/