我应该从服务器接收一个QJsonObject,它将包含一个名称为“List”的QJsonObjectQJsonArray。我的意思是,“列表”可以是QJsonObjectQJsonArray。那么如何检查“列表”是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无效,因此我将等待您更正它以指出正确的测试,而第二个仅缺少逗号。但是,当您访问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/

10-09 06:38