QJsonValue 的转换方法始终返回其默认值



我正在尝试将QJsonValues转换为正确的数据类型,但转换最终总是返回其默认值。

例如,我有以下 JSON 对象:

{
"val1": 99,
"val2": true,
"val3": "test"
}

我通过以下方式获得这些值:

QJsonValue val1 = jsonObj.value("val1");
QJsonValue val2 = jsonObj.value("val2");
QJsonValue val3 = jsonObj.value("val3");

现在,如果我在"调试"视图中检查这些 QJsonValues,它们都有正确的值和数据类型。

我看到...

  • val1as99 - QJsonValue(Number(
  • val2astrue - QJsonValue(Bool(
  • val3作为"test" - QJsonValue(String(

我现在执行以下操作:

int valInt1 = val1.toInt();
bool valBool2 = val2.toBool();
QString valString3 = val3.toString();

这将给我0对于valInt1,对于valBool2false,对于valString3"test"。出于某种原因,toString(( 似乎工作正常,但其他转换方法都会产生默认值。

使用val1,我可以执行以下操作来使其工作:

int valInt1 = val1.toString().toInt();

但这不是布尔值的选择。

有谁知道我该如何解决这个问题?我相信我在这里做的一切都是正确的。不确定问题可能是什么,文档完全按照我的方式做事,但转换总是返回默认值。

我现在已经通过将 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();

最新更新