Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Use Json data in Qt in Windows
Forum Updated to NodeBB v4.3 + New Features

Use Json data in Qt in Windows

Scheduled Pinned Locked Moved Solved General and Desktop
24 Posts 7 Posters 2.9k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Christian EhrlicherC Offline
    Christian EhrlicherC Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on last edited by
    #13

    I don't see a difference between those two pictures. The json content is exactly the same. If you want to parse the json you should take a look at the documentation of QJsonDocument and it's corresponding classes.

    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
    Visit the Qt Academy at https://academy.qt.io/catalog

    Negar_mgN 1 Reply Last reply
    0
    • Christian EhrlicherC Christian Ehrlicher

      I don't see a difference between those two pictures. The json content is exactly the same. If you want to parse the json you should take a look at the documentation of QJsonDocument and it's corresponding classes.

      Negar_mgN Offline
      Negar_mgN Offline
      Negar_mg
      wrote on last edited by
      #14

      @Christian-Ehrlicher
      Thanks, how can I separate the data? I do not know how to use QJsonDocument?
      Can you guide me with an example? For example, what should I do to store the amount of Bat_Temp data in the x variable?

      mrjjM 1 Reply Last reply
      0
      • Negar_mgN Negar_mg

        @Christian-Ehrlicher
        Thanks, how can I separate the data? I do not know how to use QJsonDocument?
        Can you guide me with an example? For example, what should I do to store the amount of Bat_Temp data in the x variable?

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by mrjj
        #15

        @Negar_mg said in Use Json data in Qt in Windows:

        QJsonDocument

           QString input = "{Bat_temp:19}"; // you used a picture so could not get real input
          // the toUTF is due to it wants a bytearrya not qstring. 
           QJsonDocument jsonResponse = QJsonDocument::fromJson(input.toUtf8());
          // ask for a json object
            QJsonObject jsonObject = jsonResponse.object();
          //access a property of that json object
            int value = jsonObject["Bat_temp"].toInt();
        
        

        for dht11Data you must use QJsonArray

        Negar_mgN 1 Reply Last reply
        1
        • mrjjM mrjj

          @Negar_mg said in Use Json data in Qt in Windows:

          QJsonDocument

             QString input = "{Bat_temp:19}"; // you used a picture so could not get real input
            // the toUTF is due to it wants a bytearrya not qstring. 
             QJsonDocument jsonResponse = QJsonDocument::fromJson(input.toUtf8());
            // ask for a json object
              QJsonObject jsonObject = jsonResponse.object();
            //access a property of that json object
              int value = jsonObject["Bat_temp"].toInt();
          
          

          for dht11Data you must use QJsonArray

          Negar_mgN Offline
          Negar_mgN Offline
          Negar_mg
          wrote on last edited by
          #16

          @mrjj
          thank you

          1 Reply Last reply
          0
          • _ Offline
            _ Offline
            _-mohamed-_
            wrote on last edited by
            #17

            @Negar_mg this is the best example, it helped me a lot:
            Example of how to use JSON file with QT

            Negar_mgN 1 Reply Last reply
            0
            • _ _-mohamed-_

              @Negar_mg this is the best example, it helped me a lot:
              Example of how to use JSON file with QT

              Negar_mgN Offline
              Negar_mgN Offline
              Negar_mg
              wrote on last edited by
              #18

              @_-mohamed-_
              thanks a lot
              You know, my problem is that I receive data from the Arduino from the serial port
              As I wrote in the above code, I can print data with an infinite loop.
              As follows :

                          while (true)
                          {
                          serial.waitForReadyRead (100000);
                          input = input.append (serial.readAll ());
                          qDebug () << input;
                          }
              

              And the output is as follows:

              //..............................................................................................................................
              Serial is open
              "{"
              "{" dht "
              "{" dht11Da "
              "{" dht11Data \ ":"
              "{" dht11Data \ ": [29,"
              "{" dht11Data \ ": [29,27]}"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " "
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht1 "
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Da "
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ":"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r \ n]"
              "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r \ n] \ r \ n } "
              //..........................................................................................................................................
              No data is received at first, so I do not know how to manage this infinite loop and store the data in an array

              _ jsulmJ 2 Replies Last reply
              0
              • Negar_mgN Negar_mg

                @_-mohamed-_
                thanks a lot
                You know, my problem is that I receive data from the Arduino from the serial port
                As I wrote in the above code, I can print data with an infinite loop.
                As follows :

                            while (true)
                            {
                            serial.waitForReadyRead (100000);
                            input = input.append (serial.readAll ());
                            qDebug () << input;
                            }
                

                And the output is as follows:

                //..............................................................................................................................
                Serial is open
                "{"
                "{" dht "
                "{" dht11Da "
                "{" dht11Data \ ":"
                "{" dht11Data \ ": [29,"
                "{" dht11Data \ ": [29,27]}"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " "
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht1 "
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Da "
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ":"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r \ n]"
                "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r \ n] \ r \ n } "
                //..........................................................................................................................................
                No data is received at first, so I do not know how to manage this infinite loop and store the data in an array

                _ Offline
                _ Offline
                _-mohamed-_
                wrote on last edited by
                #19

                @Negar_mg do you mean that you want to save the final result in a json file?

                Negar_mgN 1 Reply Last reply
                0
                • _ _-mohamed-_

                  @Negar_mg do you mean that you want to save the final result in a json file?

                  Negar_mgN Offline
                  Negar_mgN Offline
                  Negar_mg
                  wrote on last edited by
                  #20

                  @_-mohamed-_
                  i want to save this {" dht11Data \ ": [29,27]}
                  And I want to display each of the numbers like 27 in one lineEdit.

                  _ 1 Reply Last reply
                  0
                  • Negar_mgN Negar_mg

                    @_-mohamed-_
                    i want to save this {" dht11Data \ ": [29,27]}
                    And I want to display each of the numbers like 27 in one lineEdit.

                    _ Offline
                    _ Offline
                    _-mohamed-_
                    wrote on last edited by
                    #21

                    @Negar_mg You can't use a backslash in the key, you can use FrontSlash instead

                    This is the code you need:

                    #include <QApplication>
                    #include <QJsonDocument>
                    #include <QJsonObject>
                    #include <QJsonArray>
                    #include <QByteArray>
                    #include <QJsonValue>
                    #include <QDebug>
                    #include <QFile>
                    
                    int main(int argc, char *argv[])
                    {
                        QApplication a(argc, argv);
                    
                        QFile file("C:/Users/moham/OneDrive/Desktop/json file.json"); //write the file path here
                    
                        if(!file.open(QFile::ReadOnly))    //opening file
                            qDebug() << "can't open the file";
                    
                        else
                        {
                            QByteArray fileContents = file.readAll(); // reading the file
                            file.close();   //closing file
                    
                            QJsonDocument jsonDoc = QJsonDocument::fromJson(fileContents);
                    
                            QJsonObject jsonObj = jsonDoc.object();
                    
                            QJsonArray jsonArray = jsonObj[" dht11Data / "].toArray();
                    
                            foreach(QJsonValue v, jsonArray)  //printing array's values
                                qDebug() << v.toInt();        //
                    
                            return 0;
                        }
                    
                        return a.exec();
                    }
                    

                    this code reads (JSON file.json) and prints it in the console, you can use the values wherever you want.

                    I hope I helped you.

                    1 Reply Last reply
                    1
                    • Negar_mgN Negar_mg

                      @_-mohamed-_
                      thanks a lot
                      You know, my problem is that I receive data from the Arduino from the serial port
                      As I wrote in the above code, I can print data with an infinite loop.
                      As follows :

                                  while (true)
                                  {
                                  serial.waitForReadyRead (100000);
                                  input = input.append (serial.readAll ());
                                  qDebug () << input;
                                  }
                      

                      And the output is as follows:

                      //..............................................................................................................................
                      Serial is open
                      "{"
                      "{" dht "
                      "{" dht11Da "
                      "{" dht11Data \ ":"
                      "{" dht11Data \ ": [29,"
                      "{" dht11Data \ ": [29,27]}"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " "
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht1 "
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Da "
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ":"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r \ n]"
                      "{" dht11Data \ ": [29,27]} \ r \ n {\ r \ n " dht11Data \ ": [\ r \ n 29, \ r \ n 27 \ r \ n] \ r \ n } "
                      //..........................................................................................................................................
                      No data is received at first, so I do not know how to manage this infinite loop and store the data in an array

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #22

                      @Negar_mg said in Use Json data in Qt in Windows:

                      infinite loop

                      Stop using infinite loops first!
                      Please take a look at documentation and examples to see how to properly use QSerialPort: https://doc.qt.io/qt-5/qtserialport-creaderasync-example.html
                      To read from serial port connect a slot to https://doc.qt.io/qt-5/qiodevice.html#readyRead signal and use readAll() in this slot. Keep in mind that you have to accumulate the data read from serial port until you got whole JSON document!

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      4
                      • Negar_mgN Offline
                        Negar_mgN Offline
                        Negar_mg
                        wrote on last edited by
                        #23

                        Thank you all

                        1 Reply Last reply
                        0
                        • Negar_mgN Offline
                          Negar_mgN Offline
                          Negar_mg
                          wrote on last edited by Negar_mg
                          #24

                          I finally succeeded,The code I wrote is as follows:

                           MainWindow::MainWindow(QWidget *parent)
                          : QMainWindow(parent)
                          , ui(new Ui::MainWindow)
                            {
                          ui->setupUi(this);
                          
                             m_serialPort=new QSerialPort;
                             m_serialPort->setPortName("COM3");
                          
                             m_serialPort->open(QIODevice::ReadWrite);
                             m_serialPort->setBaudRate(QSerialPort::Baud9600);
                             m_serialPort->setDataBits(QSerialPort::Data8);
                             m_serialPort->setParity(QSerialPort::NoParity);
                             m_serialPort->setStopBits(QSerialPort::OneStop);
                             m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
                              while(!m_serialPort->isOpen()) m_serialPort->open(QIODevice::ReadWrite);
                          
                              connect(m_serialPort, &QSerialPort::readyRead, this, &MainWindow::handleReadyRead);
                              connect(&m_timer, &QTimer::timeout, this, &MainWindow::handleTimeout);
                          
                              m_timer.start(5000);
                           }
                          
                          
                                 void MainWindow::handleReadyRead()
                                {
                             m_readData.append(m_serialPort->readAll());
                          
                          if (!m_timer.isActive())
                              m_timer.start(5000);
                            }
                          
                              void MainWindow::handleTimeout()
                           {
                          if (m_readData.isEmpty()) {
                              qDebug()<< "m_readData is empty" <<m_readData;
                          
                          } else {
                          
                          
                              qDebug()<< "m_readData is full" <<m_readData;
                          
                          
                          
                          
                              QJsonDocument jsonDoc = QJsonDocument::fromJson(m_readData);
                              QJsonObject jsonObj = jsonDoc.object();
                          
                              QJsonValue jsonVal;
                              jsonVal = jsonObj.value(QString("Bat_Temp"));
                              QTextStream textStream(stdout);
                              textStream << QString::number(jsonVal.toInt()) << endl;
                          }
                          
                          1 Reply Last reply
                          2

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved