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

时间:2019-10-04 09:35:02

标签: qt qt5 qjson

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

例如,我有以下JSON对象:

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

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

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

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

我正在看到...

  • val1 作为 99-QJsonValue(Number)
  • val2 作为 true-QJsonValue(Bool)
  • val3 作为“测试”-QJsonValue(String)

我现在执行以下操作:

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

对于 valInt1 ,这将给我 0 ,对于 valBool2 “测试”, / strong>表示 valString3 。 由于某种原因,toString()似乎可以正常工作,但其他转换方法均会导致其默认值。

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

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

但这不是布尔值的选择。

有人知道我能解决这个问题吗?我相信我正在这里做所有事情。不知道可能是什么问题,文档是否完全按照我的意愿进行操作,但是转换总是返回默认值。

1 个答案:

答案 0 :(得分:0)

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