m
mak_trefa6 апреля 2017 г. 16:36

Как QVariant(QVariantMap) в QJSValue сконвертировать?

#PyQt5 #QML

Доброго времени суток. Как QVariant(QVariantMap) в QJSValue сконвертировать? (метод open)

import json
from PyQt5.QtCore import QObject, pyqtSlot, QVariant
from PyQt5.QtQml import QJSValue


JS_FALSE_CONST = QJSValue(False)
JS_TRUE_CONST = QJSValue(True)

class QJSONFile(QObject):
    
    def __init__(self, parent=None):
        super().__init__(parent)
        pass
    
    @pyqtSlot("QString", "QJSValue")
    def open(self, fileUrl, callback):
        try:
            f = open(fileUrl, "r")
            json_string = f.read()
            f.close()
            print(json_string)
            json_dict = json.loads(json_string)
            print(json_dict)
            js_val = QVariant(json_dict)
            print(js_val)
            callback.call([JS_TRUE_CONST, json_dict])
            
        except Exception:
            callback.call([JS_FALSE_CONST, QJSValue("")])
            
        pass
        
    @pyqtSlot("QString", "QVariant", "QJSValue")
    def save(self, fileUrl, d, callback):
        try:
            json_dict = d.toVariant()
            json_string = json.dumps(json_dict, separators=(',', ':'))
            f = open(fileUrl, "w")
            f.write(json_string)
            f.close()
            callback.call([JS_TRUE_CONST])
        except Exception:
            callback.call([JS_FALSE_CONST])
            
        pass
    
    pass
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

3
Evgenii Legotckoi
  • 7 апреля 2017 г. 1:02

У класса QVariant есть метод toJsonValue() . Если учесть, что объекты между C++ и QML конвертируются автоматически, то при передаче QJsonValue в QML , объект должен преобразоваться в QJSValue

Так что следующий вариант может быть правильным:

js_variant = QVariant(json_dict)
js_val = js_variant.toJsonValue()
    m
    • 7 апреля 2017 г. 7:08

    Traceback (most recent call last): File "/home/mak/Рабочий стол/Diplom/Classes/ImpulseSystemClasses.py", line 60, in open callback.call([JS_TRUE_CONST, js_val]) TypeError: index 1 has type 'QJsonDocument' but 'QJSValue' is expected и для QJsonDocument и для QJsonValue

      Evgenii Legotckoi
      • 7 апреля 2017 г. 8:01
      • Ответ был помечен как решение.

      Тогда попробуйте написать соответствующий парсер. Поскольку метода для конвертирования сразу в QJSValue QVariant не имеет. Да и думаю, что это логично. Поскольку QJSValue может иметь сложную древовидную структуру со вложенными в свойства дополнительными QJSValue (то есть словарями свойств, в каком-то роде).

      json_string = "{ \"success\": true, \"first_property\": 125 }"
      json_dict = json.loads(json_string)
      myEngine = QJSEngine()
      js_val = myEngine.newObject()
      
      for key, value in json_dict.items():
              js_val.setProperty(key, value)
      
      print(js_val)

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        AD

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:50баллов,
        • Очки рейтинга-4
        m
        • molni99
        • 26 октября 2024 г. 1:37

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:80баллов,
        • Очки рейтинга4
        m
        • molni99
        • 26 октября 2024 г. 1:29

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Результат:20баллов,
        • Очки рейтинга-10
        Последние комментарии
        i
        innorwall13 ноября 2024 г. 23:03
        Как написать игру на Qt - Урок 3. Взаимодействие с другими объектами what is priligy tablets What happens during the LASIK surgery process
        i
        innorwall13 ноября 2024 г. 20:09
        Использование переменных объявленных в CMakeLists.txt внутри C++ файлов where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
        i
        innorwall11 ноября 2024 г. 22:12
        Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
        i
        innorwall11 ноября 2024 г. 18:23
        QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
        i
        innorwall11 ноября 2024 г. 15:50
        Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
        Сейчас обсуждают на форуме
        i
        innorwall13 ноября 2024 г. 18:52
        добавить qlineseries в функции PMID 35774217 Free PMC article priligy cvs
        i
        innorwall11 ноября 2024 г. 10:55
        Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
        9
        9Anonim25 октября 2024 г. 9:10
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
        ИМ
        Игорь Максимов3 октября 2024 г. 4:05
        Реализация навигации по разделам Спасибо Евгений!

        Следите за нами в социальных сетях