BlinCT
24 марта 2021 г. 14:26

Создание QJson и возможная сортировка результата

Всем привет.
Сталкнулся со странной сортировкой(а может или нет) при создании документа json если я использую JsonObjevt. Ниже пример

  1. QJsonObject identify;
  2. QJsonObject values;
  3. QJsonObject device;
  4. QJsonArray intoDev;
  5.  
  6. identify.insert("type", "vhd5preset");
  7. identify.insert("version", "1");
  8. identify.insert("description", m_description);
  9.  
  10. for(int i = 0; i < m_valuesMap.size(); ++i)
  11. {
  12. QString name = m_valuesMap.keys().at(i);
  13. QString value = m_valuesMap.value(name);
  14.  
  15. values.insert(name, value);
  16. }
  17.  
  18. device.insert("model", QJsonValue("VHD5000"));
  19. device.insert("values", values);
  20.  
  21. intoDev.append(device);
  22.  
  23. identify.insert("devices", intoDev);

А вот если я использую для корня всего документа QJsonArray то поля само собою чуть по другому выглядят, но они в том порядке в каком я заполняю.

  1. QJsonArray identify;
  2. QJsonObject values;
  3. QJsonObject device;
  4. QJsonArray intoDev;
  5.  
  6. identify.append(QJsonValue (createObject("type", "vhd5preset")));
  7. identify.append(QJsonValue (createObject("version", "1")));
  8. identify.append(QJsonValue (createObject("description", m_description)));
  9.  
  10. for(int i = 0; i < m_valuesMap.size(); ++i)
  11. {
  12. QString name = m_valuesMap.keys().at(i);
  13. QString value = m_valuesMap.value(name);
  14.  
  15. values.insert(name, value);
  16. }
  17.  
  18. device.insert("model", "VHD5000");
  19. device.insert("values", values);
  20.  
  21. intoDev.append(device);
  22.  
  23. identify.append(QJsonValue (createObject("devices", intoDev)));
  24.  
  25. QJsonDocument doc(identify);

Может кто подсказать с чем связана сортировка?
Заранее спасибо.

2

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

3
ИП
  • 29 марта 2021 г. 15:37

QJsonObject хранит объекты как QMap, порядок расположения объектов идет в алфавитном порядке навания ключа.

    BlinCT
    • 29 марта 2021 г. 16:47

    А как можно обойти такой вариант?

      ИП
      • 30 марта 2021 г. 18:38

      Конечно можно:
      1. Сгенерировать JSON самостоятельно, в нужном порядке;
      2. Использовать другие библиотеки (не Qt), например rapid JSON или Nlohmann JSON , но как в них реализован порядок хранения я не знаю

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        • Последние комментарии
        • IscanderChe
          12 апреля 2025 г. 17:12
          Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
        • AK
          1 апреля 2025 г. 11:41
          Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
        • Evgenii Legotckoi
          9 марта 2025 г. 21:02
          К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
        • VP
          9 марта 2025 г. 16:14
          Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
        • ИМ
          22 ноября 2024 г. 21:51
          Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…