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.
  • Christian EhrlicherC Offline
    Christian EhrlicherC Offline
    Christian Ehrlicher
    Lifetime Qt Champion
    wrote on last edited by
    #7

    @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

    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
    0
    • Christian EhrlicherC Christian Ehrlicher

      @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

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

      @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 JonBJ 2 Replies Last reply
      0
      • 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