首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试Qt中是QJsonObject还是QJsonArray

测试Qt中是QJsonObject还是QJsonArray
EN

Stack Overflow用户
提问于 2018-10-01 11:29:12
回答 2查看 1.5K关注 0票数 2

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

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

1)这里的“列表”是一个QJsonArray

代码语言:javascript
复制
{
  "Data":
         {
           "List":
             [
                {
                   "name": "something",
                   "id": "number"
                },
                {
                   "name": "something",
                   "id": "number"
                },
                {
                   "name":"something",
                   "id": "number"
               }
            ] 
        } 
}

2)这里的“列表”是一个QJsonObject

代码语言:javascript
复制
{
   "Data":
          {
            "List":
               {
                  "name": "something",
                  "id": "number"
               }
          }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-01 11:40:37

示例的第一个json无效,所以我将等待您更正它以指出正确的测试,如果第二个json只缺少一个逗号。但是,当您访问QJsonObjectQJsonArray的字段时,它返回一个QJsonValueRef,它是处理多种类型数据的助手,如果您知道它是QJsonObject还是QJsonArray,则必须使用isObject()isArray()方法:

代码语言:javascript
复制
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";
}

输出:

代码语言:javascript
复制
QJsonValue(object, QJsonObject({"id":"number","name":"something"})) is Object

然而,在您的第一个示例中,您希望显示以下有效的json:

代码语言:javascript
复制
{
    "Data": {
        "List": [{
            "name": "something",
            "id": "number"
        }, {
            "name": "something",
            "id": "number"
        }, {
            "name": "something",
            "id": "number"
        }]
    }
}

如果您使用相同的方法,您将得到:

代码语言:javascript
复制
QJsonValue(array, QJsonArray([{"id":"number","name":"something"},{"id":"number","name":"something"},{"id":"number","name":"something"}])) 
is array
票数 1
EN

Stack Overflow用户

发布于 2018-10-01 11:50:56

我假设您已经将服务器响应解析为有效的QJsonObject。使用QJsonValue QJsonObject::operator[](QString),我们检索一个基本上是变体类型的QJsonValue。您可以通过各种bool QJsonValue::is*()方法查询值的类型。在您的情况下,您需要bool QJsonValue::isArray()bool QJsonIsObject()

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52590131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档