QJsonValue 的转换方法总是 return 它们的默认值
Conversion methods for QJsonValue always return their default value
我正在尝试将 QJsonValues 转换为其正确的数据类型,但转换总是以 return 其默认值结束。
例如,我有以下 JSON 对象:
{
"val1": 99,
"val2": true,
"val3": "test"
}
我通过以下方式获取这些值:
QJsonValue val1 = jsonObj.value("val1");
QJsonValue val2 = jsonObj.value("val2");
QJsonValue val3 = jsonObj.value("val3");
现在,如果我在 Debug 视图中检查这些 QJsonValues,它们都有正确的值和数据类型。
我看到...
- val1 as 99 - QJsonValue(Number)
- val2 as true - QJsonValue(Bool)
- val3 as "test" - QJsonValue(String)
我现在执行以下操作:
int valInt1 = val1.toInt();
bool valBool2 = val2.toBool();
QString valString3 = val3.toString();
这将给我 0 for valInt1, false for valString3 的 valBool2 和 "test"。
出于某种原因,toString() 似乎工作正常,但其他转换方法都导致其默认值。
使用 val1 我可以执行以下操作使其工作:
int valInt1 = val1.toString().toInt();
但这不是布尔值的选项。
有谁知道我该如何解决这个问题?我相信我正在做这里的一切。不确定可能是什么问题,文档完全按照我的方式做事,但转换总是 return 默认值。
我现在通过将 JsonObject 转换为 QVariantMap 并忽略 QJsonValues 解决了这个问题。它们要么被窃听,要么我不明白它们是如何工作的。
QVariantMap map = jsonObj.toVariantMap();
int valInt1 = map.value("val1").toInt();
bool valBool2 = map.value("val2").toBool();
QString valString3 = map.value("val3").toString();
我正在尝试将 QJsonValues 转换为其正确的数据类型,但转换总是以 return 其默认值结束。
例如,我有以下 JSON 对象:
{
"val1": 99,
"val2": true,
"val3": "test"
}
我通过以下方式获取这些值:
QJsonValue val1 = jsonObj.value("val1");
QJsonValue val2 = jsonObj.value("val2");
QJsonValue val3 = jsonObj.value("val3");
现在,如果我在 Debug 视图中检查这些 QJsonValues,它们都有正确的值和数据类型。
我看到...
- val1 as 99 - QJsonValue(Number)
- val2 as true - QJsonValue(Bool)
- val3 as "test" - QJsonValue(String)
我现在执行以下操作:
int valInt1 = val1.toInt();
bool valBool2 = val2.toBool();
QString valString3 = val3.toString();
这将给我 0 for valInt1, false for valString3 的 valBool2 和 "test"。 出于某种原因,toString() 似乎工作正常,但其他转换方法都导致其默认值。
使用 val1 我可以执行以下操作使其工作:
int valInt1 = val1.toString().toInt();
但这不是布尔值的选项。
有谁知道我该如何解决这个问题?我相信我正在做这里的一切。不确定可能是什么问题,文档完全按照我的方式做事,但转换总是 return 默认值。
我现在通过将 JsonObject 转换为 QVariantMap 并忽略 QJsonValues 解决了这个问题。它们要么被窃听,要么我不明白它们是如何工作的。
QVariantMap map = jsonObj.toVariantMap();
int valInt1 = map.value("val1").toInt();
bool valBool2 = map.value("val2").toBool();
QString valString3 = map.value("val3").toString();