我应该从服务器收到一个QJsonObject
,该服务器将包含一个名称为“ List”的QJsonObject
或QJsonArray
。我的意思是,“列表”可以是QJsonObject
或QJsonArray
。那么如何检查“列表”是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"
}
}
}
先谢谢了。任何帮助将不胜感激。
答案 0 :(得分:0)
第一个采样的json无效,因此我将等待您更正它以指出正确的测试,而第二个仅缺少逗号。但是,当您访问watchCurrentLocation() {
getCurrentPositionTimeoutHandle = setTimeout(() => {
// first try with without enableHighAccuracy
navigator.geolocation.getCurrentPosition(
(position) => {
console.log("get user location with setTimeout 1");
const passengerInfo = {
latitude: position.coords.latitude,
longitude: position.coords.longitude
}
this.updatePassengerCoordinates(passengerInfo);
if (getCurrentPositionTimeoutHandle) {
console.log("Timeout function exist so call that again 2");
this.watchCurrentLocation();
}
},
(error) => {
console.log("Error while getting Current Location : ", error);
//console.log("Error while executing timeout way method 3");
this.watchCurrentLocation()
},
{ timeout: 20000, maximumAge: 0 });
}, 3000);
}
或QJsonObject
的字段时,它会返回一个QJsonArray
,它是处理多种类型数据的助手,并且您知道它是否是一个QJsonValueRef
或QJsonObject
,您必须使用方法isObject()
或isArray()
:
QJsonArray
输出:
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";
}
在第一个示例中,您想要显示以下有效的json:
QJsonValue(object, QJsonObject({"id":"number","name":"something"})) is Object
如果使用相同的方法,则会得到:
{
"Data": {
"List": [{
"name": "something",
"id": "number"
}, {
"name": "something",
"id": "number"
}, {
"name": "something",
"id": "number"
}]
}
}
答案 1 :(得分:0)
我假设您已经将服务器响应解析为有效的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
}