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

标签 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");

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

我看到了...

  • val199 - QJsonValue(Number)
  • val2 as true - QJsonValue(Bool)
  • val3 as “测试” - QJsonValue(String)

我现在执行以下操作:

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

这将为我提供0(valInt1)、false(valBool2)和“test” 代表 valString3。 由于某种原因,toString() 似乎工作正常,但其他转换方法都返回其默认值。

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

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

但这不是 bool 值的选项。

有谁知道我该如何解决这个问题吗?我相信我在这里做的一切都是正确的。不确定问题可能是什么,并且文档的处理方式与我完全相同,但转换始终返回默认值。

最佳答案

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

关于qt - QJsonValue 的转换方法始终返回其默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233685/

相关文章:

c++ - Qt : get mouse pressed event even if a button is pressed

c++ - 如何将 QVariant 转换为 QJsonValue?

c++ - 如何将子项插入到 QTreeWidget 层次结构中?

qt - 如何在QGraphicsItem中绘制一半的饼图

qt - 不使用 QML 部署 Qt 项目

c++ - 在 Qt Widgets 应用程序中,无法在重载的 `QSpinBox` 中的 `setValue` 之后更改 `paintEvent` 的值?

c++ - Qjson获取对象名称

c++ - 如何将多个 QJsonObject 添加到 QJsonDocument - Qt

c++ - 为在 Qt 中开发的应用程序的 session 维护日志文件

c++ - QDom 删除节点