Первый 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