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 3.2k 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.
  • 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