Методы преобразования для QJsonValue всегда возвращают свое значение по умолчанию - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь преобразовать QJsonValues ​​в их правильные типы данных, но преобразование всегда заканчивается возвращением их значения по умолчанию.

Например, у меня есть следующий объект JSON:

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

Я получаю эти значения с помощью:

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

Теперь, если я проверю эти значения QJsonValue в представлении Debug, все они имеют правильные значения и типы данных.

Я вижу...

  • val1 как 99 - QJsonValue (Число)
  • val2 как true- QJsonValue (Bool)
  • val3 как "test" - 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.

Кто-нибудь знает, как я мог решить эту проблему? Я верю, что делаю все прямо здесь. Не уверен, что проблема может быть, и документация делает вещи точно так, как я бы их сделал, но преобразования всегда возвращают значения по умолчанию.

1 Ответ

0 голосов
/ 04 октября 2019

Я решил эту проблему на данный момент, преобразовав 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();
...