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. Parsing JSON file
Forum Updated to NodeBB v4.3 + New Features

Parsing JSON file

Scheduled Pinned Locked Moved Solved General and Desktop
23 Posts 5 Posters 3.0k Views
  • 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.
  • J jenya7

    @Christian-Ehrlicher said in Parsing JSON file:

    @jenya7 said in Parsing JSON file:

    I just set a break point

    When you don't show us your code - how should we help?
    Please show us how you try to parse the array, not some debugger output

    That's all my code

    QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
    QJsonObject jsonObject = jsonResponse.object();
       
    QJsonArray daily = jsonObject["[DailyForecasts"].toArray();
    

    in jsonObject I see all objects. daily <0 items>.

    KroMignonK Offline
    KroMignonK Offline
    KroMignon
    wrote on last edited by
    #9

    @jenya7 said in Parsing JSON file:

    QJsonArray daily = jsonObject["[DailyForecasts"].toArray();

    I don't known if it is a copy past from your real code.
    If it is the case there is a typo ==> "[DailyForecasts" should be "DailyForecasts"

    It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

    J 1 Reply Last reply
    1
    • J jenya7

      @Christian-Ehrlicher said in Parsing JSON file:

      @jenya7 said in Parsing JSON file:

      I just set a break point

      When you don't show us your code - how should we help?
      Please show us how you try to parse the array, not some debugger output

      That's all my code

      QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
      QJsonObject jsonObject = jsonResponse.object();
         
      QJsonArray daily = jsonObject["[DailyForecasts"].toArray();
      

      in jsonObject I see all objects. daily <0 items>.

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

      @jenya7 said in Parsing JSON file:

      QJsonArray daily = jsonObject["[DailyForecasts"].toArray();

      That's why it's so important you show your actual code....

      1 Reply Last reply
      0
      • Christian EhrlicherC Offline
        Christian EhrlicherC Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by
        #11

        And you still not show us how you try to access the single array elements nor what the debug output suggested by @JonB prints out.

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

        J 1 Reply Last reply
        1
        • KroMignonK KroMignon

          @jenya7 said in Parsing JSON file:

          QJsonArray daily = jsonObject["[DailyForecasts"].toArray();

          I don't known if it is a copy past from your real code.
          If it is the case there is a typo ==> "[DailyForecasts" should be "DailyForecasts"

          J Offline
          J Offline
          jenya7
          wrote on last edited by
          #12

          @KroMignon said in Parsing JSON file:

          @jenya7 said in Parsing JSON file:

          QJsonArray daily = jsonObject["[DailyForecasts"].toArray();

          I don't known if it is a copy past from your real code.
          If it is the case there is a typo ==> "[DailyForecasts" should be "DailyForecasts"

          Yes. Sorry. Was my typo. Now it seems to be OK.
          But how can I go further?

           QJsonArray daily1 = jsonObject["DailyForecasts"].toArray();
           QJsonArray temp = daily1 [?].?
          
          1 Reply Last reply
          0
          • Christian EhrlicherC Christian Ehrlicher

            And you still not show us how you try to access the single array elements nor what the debug output suggested by @JonB prints out.

            J Offline
            J Offline
            jenya7
            wrote on last edited by
            #13

            @Christian-Ehrlicher said in Parsing JSON file:

            And you still not show us how you try to access the single array elements nor what the debug output suggested by @JonB prints out.

            I still don't know how to do it. :)

            KroMignonK 1 Reply Last reply
            0
            • J jenya7

              @Christian-Ehrlicher said in Parsing JSON file:

              And you still not show us how you try to access the single array elements nor what the debug output suggested by @JonB prints out.

              I still don't know how to do it. :)

              KroMignonK Offline
              KroMignonK Offline
              KroMignon
              wrote on last edited by KroMignon
              #14

              @jenya7 said in Parsing JSON file:

              I still don't know how to do it. :)

              Yes, Qt documentation about JSON is a little bit short (https://doc.qt.io/qt-5/json.html).
              You can iterate through the array:

              
              for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
              {
                  // convert value to object
                  QJsonObject day = dayValue.toObject();
                  // according to your post, temperature seems to be an object, not an array
                  QJsonObject temperature = day["Temperature"].toObject();
              
              }
              

              It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

              J 1 Reply Last reply
              1
              • KroMignonK KroMignon

                @jenya7 said in Parsing JSON file:

                I still don't know how to do it. :)

                Yes, Qt documentation about JSON is a little bit short (https://doc.qt.io/qt-5/json.html).
                You can iterate through the array:

                
                for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                {
                    // convert value to object
                    QJsonObject day = dayValue.toObject();
                    // according to your post, temperature seems to be an object, not an array
                    QJsonObject temperature = day["Temperature"].toObject();
                
                }
                
                J Offline
                J Offline
                jenya7
                wrote on last edited by
                #15

                @KroMignon said in Parsing JSON file:

                @jenya7 said in Parsing JSON file:

                I still don't know how to do it. :)

                Yes, Qt documentation about JSON is a little bit short (https://doc.qt.io/qt-5/json.html).
                You can iterate through the array:

                
                for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                {
                    // convert value to object
                    QJsonObject day = dayValue.toObject();
                    // according to your post, temperature seems to be an object, not an array
                    QJsonObject temperature = day["Temperature"].toObject();
                
                }
                

                Thank you. It works. And how to get objects inside the "Temperature"?
                "Temperature"->"Maximum"->"Value"
                "Temperature"->"Minimum"->"Value"
                I wonder why I can't access it like this

                QJsonArray temp = daily[0].toArray();
                

                I get no errors but it doesn't work.

                KroMignonK JonBJ 2 Replies Last reply
                0
                • J jenya7

                  @KroMignon said in Parsing JSON file:

                  @jenya7 said in Parsing JSON file:

                  I still don't know how to do it. :)

                  Yes, Qt documentation about JSON is a little bit short (https://doc.qt.io/qt-5/json.html).
                  You can iterate through the array:

                  
                  for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                  {
                      // convert value to object
                      QJsonObject day = dayValue.toObject();
                      // according to your post, temperature seems to be an object, not an array
                      QJsonObject temperature = day["Temperature"].toObject();
                  
                  }
                  

                  Thank you. It works. And how to get objects inside the "Temperature"?
                  "Temperature"->"Maximum"->"Value"
                  "Temperature"->"Minimum"->"Value"
                  I wonder why I can't access it like this

                  QJsonArray temp = daily[0].toArray();
                  

                  I get no errors but it doesn't work.

                  KroMignonK Offline
                  KroMignonK Offline
                  KroMignon
                  wrote on last edited by
                  #16

                  @jenya7 said in Parsing JSON file:

                  I get no errors but it doesn't work.

                  Why should it work?
                  You are trying to convert QJsonValue to QJsonArray, but according to your post it is a QJsonObject.

                  You could use QJsonValue::isObject() or QJsonValue::isArray() to ensure value type before converting.
                  But, as you know the right type, you only have to use the right functions ;)

                  It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                  J 1 Reply Last reply
                  1
                  • KroMignonK KroMignon

                    @jenya7 said in Parsing JSON file:

                    I get no errors but it doesn't work.

                    Why should it work?
                    You are trying to convert QJsonValue to QJsonArray, but according to your post it is a QJsonObject.

                    You could use QJsonValue::isObject() or QJsonValue::isArray() to ensure value type before converting.
                    But, as you know the right type, you only have to use the right functions ;)

                    J Offline
                    J Offline
                    jenya7
                    wrote on last edited by
                    #17

                    I'm lost from this point on. The best I could find

                    QJsonValue temp_max = temperature.value("Maximum");
                    

                    Doesn't work.

                    J.HilkJ KroMignonK 2 Replies Last reply
                    0
                    • J jenya7

                      I'm lost from this point on. The best I could find

                      QJsonValue temp_max = temperature.value("Maximum");
                      

                      Doesn't work.

                      J.HilkJ Offline
                      J.HilkJ Offline
                      J.Hilk
                      Moderators
                      wrote on last edited by
                      #18

                      @jenya7
                      there is not much magic to it:

                      "key": [] // Array
                      "key":{} //Object
                      "key":everything else //value
                      

                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                      Q: What's that?
                      A: It's blue light.
                      Q: What does it do?
                      A: It turns blue.

                      1 Reply Last reply
                      2
                      • J jenya7

                        I'm lost from this point on. The best I could find

                        QJsonValue temp_max = temperature.value("Maximum");
                        

                        Doesn't work.

                        KroMignonK Offline
                        KroMignonK Offline
                        KroMignon
                        wrote on last edited by KroMignon
                        #19

                        @jenya7 said in Parsing JSON file:

                        I'm lost from this point on. The best I could find

                           QJsonValue temp_max = temperature.value("Maximum");
                        

                        Doesn't work.

                        What do you mean with does not work?

                        This should work:

                        for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                        {
                            // convert value to object
                            QJsonObject day = dayValue.toObject();
                            // according to your post, temperature seems to be an object, not an array
                            QJsonObject temperature = day["Temperature"].toObject();
                            QJsonObject maxTemp = temperature["Maximum"].toObject();
                            QJsonObject minTemp = temperature["Minimum"].toObject();
                            if(!maxTemp.isEmpty())
                                qDebug() << "'MaxTemp is" << maxTemp["Value"].toDouble() << maxTemp["Unit"].toString();
                            if(!minTemp.isEmpty())
                                qDebug() << "'MinTemp is" << minTemp["Value"].toDouble() << minTemp["Unit"].toString();   
                        }
                        

                        It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                        J 1 Reply Last reply
                        4
                        • J jenya7

                          @KroMignon said in Parsing JSON file:

                          @jenya7 said in Parsing JSON file:

                          I still don't know how to do it. :)

                          Yes, Qt documentation about JSON is a little bit short (https://doc.qt.io/qt-5/json.html).
                          You can iterate through the array:

                          
                          for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                          {
                              // convert value to object
                              QJsonObject day = dayValue.toObject();
                              // according to your post, temperature seems to be an object, not an array
                              QJsonObject temperature = day["Temperature"].toObject();
                          
                          }
                          

                          Thank you. It works. And how to get objects inside the "Temperature"?
                          "Temperature"->"Maximum"->"Value"
                          "Temperature"->"Minimum"->"Value"
                          I wonder why I can't access it like this

                          QJsonArray temp = daily[0].toArray();
                          

                          I get no errors but it doesn't work.

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

                          @jenya7
                          As @KroMignon says.

                          While you are developing, and not understanding how your JSON is parsed/what objects/arrays etc. it is composed of, make use of QJsonValue::Type QJsonValue::type() const and enum QJsonValue::Type. If you print this all the time you would know how the JSON is being parsed, e.g.

                          qDebug() << jsonObject["DailyForecasts"].type() << day["Temperature"].type() << temperature["Maximum"].type()
                          

                          etc. That's how you know whether you can go toObject/toArray/toString() etc.

                          1 Reply Last reply
                          0
                          • KroMignonK KroMignon

                            @jenya7 said in Parsing JSON file:

                            I'm lost from this point on. The best I could find

                               QJsonValue temp_max = temperature.value("Maximum");
                            

                            Doesn't work.

                            What do you mean with does not work?

                            This should work:

                            for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                            {
                                // convert value to object
                                QJsonObject day = dayValue.toObject();
                                // according to your post, temperature seems to be an object, not an array
                                QJsonObject temperature = day["Temperature"].toObject();
                                QJsonObject maxTemp = temperature["Maximum"].toObject();
                                QJsonObject minTemp = temperature["Minimum"].toObject();
                                if(!maxTemp.isEmpty())
                                    qDebug() << "'MaxTemp is" << maxTemp["Value"].toDouble() << maxTemp["Unit"].toString();
                                if(!minTemp.isEmpty())
                                    qDebug() << "'MinTemp is" << minTemp["Value"].toDouble() << minTemp["Unit"].toString();   
                            }
                            
                            J Offline
                            J Offline
                            jenya7
                            wrote on last edited by
                            #21

                            @KroMignon said in Parsing JSON file:

                            @jenya7 said in Parsing JSON file:

                            I'm lost from this point on. The best I could find

                               QJsonValue temp_max = temperature.value("Maximum");
                            

                            Doesn't work.

                            What do you mean with does not work?

                            This should work:

                            for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                            {
                                // convert value to object
                                QJsonObject day = dayValue.toObject();
                                // according to your post, temperature seems to be an object, not an array
                                QJsonObject temperature = day["Temperature"].toObject();
                                QJsonObject maxTemp = temperature["Maximum"].toObject();
                                QJsonObject minTemp = temperature["Minimum"].toObject();
                                if(!maxTemp.isEmpty())
                                    qDebug() << "'MaxTemp is" << maxTemp["Value"].toDouble() << maxTemp["Unit"].toString();
                                if(!minTemp.isEmpty())
                                    qDebug() << "'MinTemp is" << minTemp["Value"].toDouble() << minTemp["Unit"].toString();   
                            }
                            

                            It works. Thank you.

                            KroMignonK 1 Reply Last reply
                            0
                            • J jenya7

                              @KroMignon said in Parsing JSON file:

                              @jenya7 said in Parsing JSON file:

                              I'm lost from this point on. The best I could find

                                 QJsonValue temp_max = temperature.value("Maximum");
                              

                              Doesn't work.

                              What do you mean with does not work?

                              This should work:

                              for(const auto & dayValue : jsonObject["DailyForecasts"].toArray())
                              {
                                  // convert value to object
                                  QJsonObject day = dayValue.toObject();
                                  // according to your post, temperature seems to be an object, not an array
                                  QJsonObject temperature = day["Temperature"].toObject();
                                  QJsonObject maxTemp = temperature["Maximum"].toObject();
                                  QJsonObject minTemp = temperature["Minimum"].toObject();
                                  if(!maxTemp.isEmpty())
                                      qDebug() << "'MaxTemp is" << maxTemp["Value"].toDouble() << maxTemp["Unit"].toString();
                                  if(!minTemp.isEmpty())
                                      qDebug() << "'MinTemp is" << minTemp["Value"].toDouble() << minTemp["Unit"].toString();   
                              }
                              

                              It works. Thank you.

                              KroMignonK Offline
                              KroMignonK Offline
                              KroMignon
                              wrote on last edited by
                              #22

                              @jenya7 said in Parsing JSON file:

                              It works. Thank you.

                              But you did not reply to my question... What exactly did not work with your code?
                              AFAIK, there is no difference between temperature.value("Maximum") and temperature["Maximum"].

                              It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                              J 1 Reply Last reply
                              1
                              • KroMignonK KroMignon

                                @jenya7 said in Parsing JSON file:

                                It works. Thank you.

                                But you did not reply to my question... What exactly did not work with your code?
                                AFAIK, there is no difference between temperature.value("Maximum") and temperature["Maximum"].

                                J Offline
                                J Offline
                                jenya7
                                wrote on last edited by
                                #23

                                @KroMignon said in Parsing JSON file:

                                @jenya7 said in Parsing JSON file:

                                It works. Thank you.

                                But you did not reply to my question... What exactly did not work with your code?
                                AFAIK, there is no difference between temperature.value("Maximum") and temperature["Maximum"].

                                Yes. It should be the same. Probably I didn't cast it to the right data type.

                                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