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. JSON read and write values

JSON read and write values

Scheduled Pinned Locked Moved Unsolved General and Desktop
29 Posts 6 Posters 5.3k 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.
  • A another_one

    @SGaist Thank you!

    almost everything worked
    At the setup ui I write values to JSON file
    But when I trying to write during filedialog launched by button clicking its not working

     QFile file_json2(QString::fromStdString("./monMK.json"));
                if (!file_json2.open(QFile::ReadOnly))
                {
                    qDebug() << "json didnt opened";
                }
                else
                {
                    qDebug() << "json oponed";
                    QString strReply2 = (QString)file_json2.readAll();
                    qDebug() << strReply2;
    
                    file_json2.close();
                    QJsonDocument jsonResponse2 = QJsonDocument::fromJson(strReply2.toUtf8());
                    QJsonObject jsonObject2 = jsonResponse2.object();
    
                    jsonObject2["FILE_LOAD"] = g_FILE_LOAD;
                    jsonResponse2.setObject(jsonObject2);
                    file_json2.open(QFile::WriteOnly);
    
                    file_json2.write(jsonResponse2.toJson());
                    qDebug() << "g_FILE_LOAD" << g_FILE_LOAD;
                    file_json2.close();
                    qDebug() << strReply2;
    
                }
    

    As I understand its not possible cause of another processing
    and I should do JSON file storing by slot function emitted from filedialog of button processing
    But I don't undestand how to do an object which has to be as emitter of signal

    Please help!

    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by JonB
    #17

    @another_one
    None of the "file dialog" or "slot" or "signal" stuff you mention should be of any relevance. Your code looks like it should work OK. Why don't you say something descriptive rather than "its not working" if you're a programmer and you want help?

    A 1 Reply Last reply
    0
    • JonBJ JonB

      @another_one
      None of the "file dialog" or "slot" or "signal" stuff you mention should be of any relevance. Your code looks like it should work OK. Why don't you say something descriptive rather than "its not working" if you're a programmer and you want help?

      A Offline
      A Offline
      another_one
      wrote on last edited by
      #18

      @JonB
      Thank you for your replay!

      I'm trying to strore the file path in JSON value "FILE_LOAD" in processing of selecting *.bin file in windows folder
      To do what I click on "open_folder" button below:

      void M_m::on_open_folder_clicked()
      {
      
              QDir dir2;
              dir2.setCurrent(g_FILE_LOAD);
              QString nameFile2 = QFileDialog::getOpenFileName(this, tr("load bin"),"",        tr("*.bin"));
              if (nameFile2.isEmpty())	
              {
                  return;
              }
              else
              {
                  QFile file;
                  file.setFileName(nameFile2);
                  ui->lineEdit->setStyleSheet("color: green;  background-color: white");
                  ui->lineEdit->setText(nameFile2);
                  QFileInfo nameSt(file);
                  QString name = nameSt.fileName();
                  qDebug()<<"objectNAme="<<file.objectName();//.fileName();
                  dir2 = nameSt.dir();//.absoluteDir();
                  g_FILE_LOAD = nameFile2;
                  qDebug() << QString::number((unsigned int)fls, 16);
                  fs2->setValue(3);
              }
      }
      
      

      where fs2->setValue(3); launch Slot function in which I do the following:

        QFile file_json3(QString::fromStdString("monMK.json"));
                  if (!file_json3.open(QFile::ReadOnly))
                  {
                      qDebug() << "json didnt opened";
                  }
                  else
                  {
                      qDebug() << "json value3 opened";
                      QString strReply3 = (QString)file_json3.readAll();
                      qDebug() << strReply3; // read JSON in debug
                      QJsonDocument jsonResponse3 = QJsonDocument::fromJson(strReply3.toUtf8());
                      QJsonObject jsonObject3 = jsonResponse3.object();
                      file_json3.close();
                      jsonObject3["FILE_LOAD"] =g_FILE_LOAD;
                      jsonResponse3.setObject(jsonObject3);
                      file_json3.open(QFile::WriteOnly);
                      file_json3.write(jsonResponse3.toJson());
                      qDebug() << "g_FILE_LOAD" << "C:/temp"; // g_FILE_LOAD;
                      file_json3.close();
                      qDebug() << strReply3;
                      qDebug() << "store finished";
      
                  }
      

      And only in what case my writing to JSON file is not working
      Also I do the almost the same - I store another value from another button clicking in which I use more simplier processing whithout file dialog and it is working
      And I compared whese two cases and as result I got the following:
      In more simplier case I read JSON in debug and that is correct:
      "
      json value 1 oponed
      QJsonValue(string, "FFFFFFF085000020")
      "{\n "BITS": "8",\n "FILE_COMP": "Undefined",\n "FILE_LOAD": "C:/temp",\n "FLOAD": "C:/temp",\n "LD_ADDR": "FFFFFFF085000020",\n "MEM_ADDR": "FFFFFFF085000000",\n "MEM_TYPE": "LWord",\n "PARITY": "PAR_NONE",\n "PORT": "COM3",\n "RATE": "115200",\n "STOPBIT": "STOP_2",\n "ST_ADDR": "FFFFFFF085000000"\n}\n"
      "
      In case with problem of storing I read JSON in debug and that is not correct:
      "
      json value3 oponed
      "{\n "FILE_LOAD": "C:/tmp",\n "PORT": "PORT20"\n}\n"
      g_FILE_LOAD C:/temp
      "{\n "FILE_LOAD": "C:/tmp",\n "PORT": "PORT20"\n}\n"
      "
      And maybe because of what I can not do right writing

      So please help to figure out

      Thanks!

      JonBJ 1 Reply Last reply
      0
      • A another_one

        @JonB
        Thank you for your replay!

        I'm trying to strore the file path in JSON value "FILE_LOAD" in processing of selecting *.bin file in windows folder
        To do what I click on "open_folder" button below:

        void M_m::on_open_folder_clicked()
        {
        
                QDir dir2;
                dir2.setCurrent(g_FILE_LOAD);
                QString nameFile2 = QFileDialog::getOpenFileName(this, tr("load bin"),"",        tr("*.bin"));
                if (nameFile2.isEmpty())	
                {
                    return;
                }
                else
                {
                    QFile file;
                    file.setFileName(nameFile2);
                    ui->lineEdit->setStyleSheet("color: green;  background-color: white");
                    ui->lineEdit->setText(nameFile2);
                    QFileInfo nameSt(file);
                    QString name = nameSt.fileName();
                    qDebug()<<"objectNAme="<<file.objectName();//.fileName();
                    dir2 = nameSt.dir();//.absoluteDir();
                    g_FILE_LOAD = nameFile2;
                    qDebug() << QString::number((unsigned int)fls, 16);
                    fs2->setValue(3);
                }
        }
        
        

        where fs2->setValue(3); launch Slot function in which I do the following:

          QFile file_json3(QString::fromStdString("monMK.json"));
                    if (!file_json3.open(QFile::ReadOnly))
                    {
                        qDebug() << "json didnt opened";
                    }
                    else
                    {
                        qDebug() << "json value3 opened";
                        QString strReply3 = (QString)file_json3.readAll();
                        qDebug() << strReply3; // read JSON in debug
                        QJsonDocument jsonResponse3 = QJsonDocument::fromJson(strReply3.toUtf8());
                        QJsonObject jsonObject3 = jsonResponse3.object();
                        file_json3.close();
                        jsonObject3["FILE_LOAD"] =g_FILE_LOAD;
                        jsonResponse3.setObject(jsonObject3);
                        file_json3.open(QFile::WriteOnly);
                        file_json3.write(jsonResponse3.toJson());
                        qDebug() << "g_FILE_LOAD" << "C:/temp"; // g_FILE_LOAD;
                        file_json3.close();
                        qDebug() << strReply3;
                        qDebug() << "store finished";
        
                    }
        

        And only in what case my writing to JSON file is not working
        Also I do the almost the same - I store another value from another button clicking in which I use more simplier processing whithout file dialog and it is working
        And I compared whese two cases and as result I got the following:
        In more simplier case I read JSON in debug and that is correct:
        "
        json value 1 oponed
        QJsonValue(string, "FFFFFFF085000020")
        "{\n "BITS": "8",\n "FILE_COMP": "Undefined",\n "FILE_LOAD": "C:/temp",\n "FLOAD": "C:/temp",\n "LD_ADDR": "FFFFFFF085000020",\n "MEM_ADDR": "FFFFFFF085000000",\n "MEM_TYPE": "LWord",\n "PARITY": "PAR_NONE",\n "PORT": "COM3",\n "RATE": "115200",\n "STOPBIT": "STOP_2",\n "ST_ADDR": "FFFFFFF085000000"\n}\n"
        "
        In case with problem of storing I read JSON in debug and that is not correct:
        "
        json value3 oponed
        "{\n "FILE_LOAD": "C:/tmp",\n "PORT": "PORT20"\n}\n"
        g_FILE_LOAD C:/temp
        "{\n "FILE_LOAD": "C:/tmp",\n "PORT": "PORT20"\n}\n"
        "
        And maybe because of what I can not do right writing

        So please help to figure out

        Thanks!

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #19

        @another_one
        I don't know. suggest you put qDebug() statements after each line as you change the JSON to see what's going on where. The fact that you use a dialog to get a pathname from the user cannot be relevant.

        QString strReply3 = (QString)file_json3.readAll(); do not use this. Use a suitable QString method.

        jsulmJ A 2 Replies Last reply
        0
        • JonBJ JonB

          @another_one
          I don't know. suggest you put qDebug() statements after each line as you change the JSON to see what's going on where. The fact that you use a dialog to get a pathname from the user cannot be relevant.

          QString strReply3 = (QString)file_json3.readAll(); do not use this. Use a suitable QString method.

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

          @JonB said in JSON read and write values:

          do not use this. Use a suitable QString method.

          @another_one @SGaist wrote that several times already, don't know why you're not lisening...

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

          1 Reply Last reply
          0
          • JonBJ JonB

            @another_one
            I don't know. suggest you put qDebug() statements after each line as you change the JSON to see what's going on where. The fact that you use a dialog to get a pathname from the user cannot be relevant.

            QString strReply3 = (QString)file_json3.readAll(); do not use this. Use a suitable QString method.

            A Offline
            A Offline
            another_one
            wrote on last edited by
            #21

            @JonB said in JSON read and write values:

            Use a suitable QString method.

            Sorry I didint undestand, what is why I still do not use what
            Could you bring some example?, please

            jsulmJ 1 Reply Last reply
            0
            • A another_one

              @JonB said in JSON read and write values:

              Use a suitable QString method.

              Sorry I didint undestand, what is why I still do not use what
              Could you bring some example?, please

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

              @another_one You can't use C-style cast to cat a QByteArray to QString.
              Use one of the from* methods like https://doc.qt.io/qt-6/qstring.html#fromLatin1-2 depending on the used encoding.

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

              A 1 Reply Last reply
              0
              • jsulmJ jsulm

                @another_one You can't use C-style cast to cat a QByteArray to QString.
                Use one of the from* methods like https://doc.qt.io/qt-6/qstring.html#fromLatin1-2 depending on the used encoding.

                A Offline
                A Offline
                another_one
                wrote on last edited by
                #23

                @jsulm
                Now I undestand, sorry, I need to do readall in QbyteArray as mzimmers already recomended
                Thanks to all!

                A 1 Reply Last reply
                0
                • A another_one

                  @jsulm
                  Now I undestand, sorry, I need to do readall in QbyteArray as mzimmers already recomended
                  Thanks to all!

                  A Offline
                  A Offline
                  another_one
                  wrote on last edited by
                  #24

                  @another_one

                  I did recomended changes but unfortunally it doesn help!

                              QFile file_json3(QString::fromStdString("monMK.json"));
                              if (!file_json3.open(QFile::ReadOnly))
                              {
                                  qDebug() << "json didnt opened";
                              }
                              else
                              {
                                  QByteArray qba3;
                                  QJsonParseError qjpe3;
                                  qba3 = file_json3.readAll();
                                  file_json3.close();
                                  QJsonDocument jsonResponse3 = QJsonDocument::fromJson(qba3, &qjpe3);
                                  QJsonObject jsonObject3 = jsonResponse3.object();
                                  jsonObject3["FILE_LOAD"] =  g_FILE_LOAD;
                                  jsonResponse3.setObject(jsonObject3);
                                  file_json3.open(QFile::WriteOnly);
                                  qba3 = jsonResponse3.toJson();
                                  file_json3.write(qba3);
                                  file_json3.close();
                                  qDebug() << qba3;
                                  qDebug() << "store finished";
                  
                              }
                  
                  SGaistS 1 Reply Last reply
                  0
                  • A another_one

                    @another_one

                    I did recomended changes but unfortunally it doesn help!

                                QFile file_json3(QString::fromStdString("monMK.json"));
                                if (!file_json3.open(QFile::ReadOnly))
                                {
                                    qDebug() << "json didnt opened";
                                }
                                else
                                {
                                    QByteArray qba3;
                                    QJsonParseError qjpe3;
                                    qba3 = file_json3.readAll();
                                    file_json3.close();
                                    QJsonDocument jsonResponse3 = QJsonDocument::fromJson(qba3, &qjpe3);
                                    QJsonObject jsonObject3 = jsonResponse3.object();
                                    jsonObject3["FILE_LOAD"] =  g_FILE_LOAD;
                                    jsonResponse3.setObject(jsonObject3);
                                    file_json3.open(QFile::WriteOnly);
                                    qba3 = jsonResponse3.toJson();
                                    file_json3.write(qba3);
                                    file_json3.close();
                                    qDebug() << qba3;
                                    qDebug() << "store finished";
                    
                                }
                    
                    SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by SGaist
                    #25

                    @another_one said in JSON read and write values:

                    @another_one

                                QJsonParseError qjpe3;
                                qba3 = file_json3.readAll();
                                file_json3.close();
                                QJsonDocument jsonResponse3 = QJsonDocument::fromJson(qba3, &qjpe3);
                    

                    What about checking what qjpe3 contains ?

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    Christian EhrlicherC 1 Reply Last reply
                    0
                    • SGaistS SGaist

                      @another_one said in JSON read and write values:

                      @another_one

                                  QJsonParseError qjpe3;
                                  qba3 = file_json3.readAll();
                                  file_json3.close();
                                  QJsonDocument jsonResponse3 = QJsonDocument::fromJson(qba3, &qjpe3);
                      

                      What about checking what qjpe3 contains ?

                      Christian EhrlicherC Online
                      Christian EhrlicherC Online
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on last edited by
                      #26

                      @SGaist said in JSON read and write values:

                      Why about checking what qjpe3 contains ?

                      And on the next line don't ignore qjpe3. Doing basically no error checking and the onwdering why it does not work...

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

                      A 1 Reply Last reply
                      0
                      • Christian EhrlicherC Christian Ehrlicher

                        @SGaist said in JSON read and write values:

                        Why about checking what qjpe3 contains ?

                        And on the next line don't ignore qjpe3. Doing basically no error checking and the onwdering why it does not work...

                        A Offline
                        A Offline
                        another_one
                        wrote on last edited by
                        #27

                        @Christian-Ehrlicher

                        Thanks to all!, At last I found an error in on_open_folder_clicked()

                        JonBJ 1 Reply Last reply
                        0
                        • A another_one

                          @Christian-Ehrlicher

                          Thanks to all!, At last I found an error in on_open_folder_clicked()

                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by
                          #28

                          @another_one And what was that error, given that you showed us the full source code of that function?

                          A 1 Reply Last reply
                          0
                          • JonBJ JonB

                            @another_one And what was that error, given that you showed us the full source code of that function?

                            A Offline
                            A Offline
                            another_one
                            wrote on last edited by
                            #29

                            @JonB

                            Hello!

                            I find what reason by elimination method
                            And on_open_folder_clicked() become the following:

                            void M_m::on_open_folder_clicked()
                            {
                                       QFileDialog dialog(this);
                                       dialog.setFileMode(QFileDialog::Directory);
                                       QString nameFile2 = dialog.getOpenFileName(this, tr("load bin"),"",        tr("*.bin"));
                                       qDebug() << "file name at first "<< nameFile2;
                                       if (nameFile2.isEmpty())	
                                       {
                                        return;
                            			}
                            			else
                            			{
                            				qDebug() << "dirdir2";
                            				ui->lineEdit->setStyleSheet("color: green;  background-color: white");
                            				ui->lineEdit->setText(nameFile2);
                            				g_FILE_LOAD = nameFile2;
                            
                            				qDebug() << QString::number((unsigned int)fls, 16);
                            	  
                            				ui->lineEdit->setStyleSheet("color: green;  background-color: white");
                            				ui->lineEdit->setText(nameFile2);
                            				qDebug() << "new g_FILE_LOAD" << g_FILE_LOAD;
                            		  
                            			 }
                            			fs2->setValue(3);
                            }
                            
                            1 Reply Last reply
                            0

                            • Login

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