QJsonValue 的转换方法总是返回它们的默认值

Posted

技术标签:

【中文标题】QJsonValue 的转换方法总是返回它们的默认值【英文标题】:Conversion methods for QJsonValue always return their default value 【发布时间】:2019-10-04 09:35:02 【问题描述】:

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

例如,我有以下 JSON 对象:


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

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

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

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

我看到了……

val199 - QJsonValue(Number) val2true - QJsonValue(Bool) val3 作为 "test" - QJsonValue(String)

我现在做以下事情:

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

这将为 valInt1 提供 0valBool2"test"false /strong> 用于 valString3。 出于某种原因,toString() 似乎工作正常,但其他转换方法都导致它们的默认值。

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

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

但这不是布尔值的选项。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于QJsonValue 的转换方法总是返回它们的默认值的主要内容,如果未能解决你的问题,请参考以下文章

QJsonValue 变空

jmeter返回的参数中汉字怎么总是转换成问号

request.form.get总是返回默认值

QMetaType::转换失败

从 double 转换总是返回零

Swagger - Springfox 默认总是生成一些响应消息(401,403...)。我怎样才能删除它们?