gpt4 book ai didi

c++ - Qt中测试是QJsonObject还是QJsonArray

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:07 26 4
gpt4 key购买 nike

我应该从服务器接收一个 QJsonObject,其中将包含一个名为“List”的 QJsonObjectQJsonArray。我的意思是,“列表”可以是 QJsonObjectQJsonArray。那么如何检查“List”是QJsonObject还是QJsonArray呢?

接收到的QJsonDocument可以是下面两种格式之一

1) 这里的“List”是一个QJsonArray

{
"Data":
{
"List":
[
{
"name": "something",
"id": "number"
},
{
"name": "something",
"id": "number"
},
{
"name":"something",
"id": "number"
}
]
}
}

2) 这里的“List”是一个QJsonObject

{
"Data":
{
"List":
{
"name": "something",
"id": "number"
}
}
}

提前致谢。任何帮助将不胜感激。

最佳答案

samples 的第一个 json 无效,所以我会等你更正它以指出正确的测试,在第二个只是缺少一个逗号的情况下。但是,当您访问 QJsonObjectQJsonArray 的字段时,它会返回一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com