我应该从服务器接收一个QJsonObject,它将包含一个名为"List“的QJsonObject或QJsonArray。我的意思是,“列表”可以是QJsonObject,也可以是QJsonArray。那么如何检查"List“是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"
}
}
}提前谢谢。任何帮助都将不胜感激。
发布于 2018-10-01 11:40:37
示例的第一个json无效,所以我将等待您更正它以指出正确的测试,如果第二个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发布于 2018-10-01 11:50:56
我假设您已经将服务器响应解析为有效的QJsonObject。使用QJsonValue QJsonObject::operator[](QString),我们检索一个基本上是变体类型的QJsonValue。您可以通过各种bool QJsonValue::is*()方法查询值的类型。在您的情况下,您需要bool QJsonValue::isArray()和bool QJsonIsObject()。
auto dataNode = serverResponse["Data"];
if(dataNode.isObject()) {
auto dataObject = dataNode.toObject();
// handle object case
}
else if(dataNode.isArray()) {
auto dataArray = dataNode.toArray();
// handle array case
}https://stackoverflow.com/questions/52590131
复制相似问题