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. Failing to extract value from JSON why?
Forum Updated to NodeBB v4.3 + New Features

Failing to extract value from JSON why?

Scheduled Pinned Locked Moved Unsolved General and Desktop
25 Posts 8 Posters 3.1k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Christian EhrlicherC Christian Ehrlicher

    @SPlatten said in Failing to extract value from JSON why?:

    isn’t the purpose of toString to convert the value to a string?

    The purpose of a function is to do what's documented... but I know reading documentation just takes too long...

    fcarneyF Offline
    fcarneyF Offline
    fcarney
    wrote on last edited by
    #12

    @Christian-Ehrlicher said in Failing to extract value from JSON why?:

    The purpose of a function is to do what's documented... but I know reading documentation just takes too long...

    lol, TLDR RTFM!

    C++ is a perfectly valid school of magic.

    1 Reply Last reply
    0
    • SPlattenS SPlatten

      @KroMignon yes, i realise that but the name of the function is toString, so I expect the result to be whatever is on the left converted to a string.

      JKSHJ Offline
      JKSHJ Offline
      JKSH
      Moderators
      wrote on last edited by JKSH
      #13

      @SPlatten said in Failing to extract value from JSON why?:

      the name of the function is toString, so I expect the result to be whatever is on the left converted to a string.

      Following that logic, would you also always expect QJsonValue::toArray() to convert your value to an array, and QJsonValue::toObject() to convert your value to an object, and QJsonValue::toInt() to convert your value to an integer? Even if the value is not an array or an object or a number?

      Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

      SPlattenS 1 Reply Last reply
      4
      • JKSHJ JKSH

        @SPlatten said in Failing to extract value from JSON why?:

        the name of the function is toString, so I expect the result to be whatever is on the left converted to a string.

        Following that logic, would you also always expect QJsonValue::toArray() to convert your value to an array, and QJsonValue::toObject() to convert your value to an object, and QJsonValue::toInt() to convert your value to an integer? Even if the value is not an array or an object or a number?

        SPlattenS Offline
        SPlattenS Offline
        SPlatten
        wrote on last edited by
        #14

        @JKSH , of course, and if it couldn't then I would expect an error.

        Kind Regards,
        Sy

        JonBJ KroMignonK 2 Replies Last reply
        0
        • SPlattenS SPlatten

          @JKSH , of course, and if it couldn't then I would expect an error.

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

          @SPlatten
          I'm not criticizing you, just making an observation. It did report an error. But it reported an error by the toString() return a null QString(), which is an invalid string, for you to check for, rather than a "message"/"exception". Which is the Qt library way of returning errors.

          SPlattenS 1 Reply Last reply
          0
          • SPlattenS SPlatten

            @JKSH , of course, and if it couldn't then I would expect an error.

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

            @SPlatten said in Failing to extract value from JSON why?:

            if it couldn't then I would expect an error.

            Qt is avoiding exception usage, so what kind of error did you expect?
            And you should not expect to much but simply some time hit the F1 key on your keyboard to get the help for the function. All is documentation, you only have to read it.

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

            SPlattenS 1 Reply Last reply
            0
            • JonBJ JonB

              @SPlatten
              I'm not criticizing you, just making an observation. It did report an error. But it reported an error by the toString() return a null QString(), which is an invalid string, for you to check for, rather than a "message"/"exception". Which is the Qt library way of returning errors.

              SPlattenS Offline
              SPlattenS Offline
              SPlatten
              wrote on last edited by
              #17

              @JonB normally I always check the return of a function, I will revisit this code.

              Kind Regards,
              Sy

              JKSHJ 1 Reply Last reply
              0
              • KroMignonK KroMignon

                @SPlatten said in Failing to extract value from JSON why?:

                if it couldn't then I would expect an error.

                Qt is avoiding exception usage, so what kind of error did you expect?
                And you should not expect to much but simply some time hit the F1 key on your keyboard to get the help for the function. All is documentation, you only have to read it.

                SPlattenS Offline
                SPlattenS Offline
                SPlatten
                wrote on last edited by
                #18

                @KroMignon , Why is Qt avoid exception usage, if there is an error then there should be a mechanism for finding out what was wrong.

                Kind Regards,
                Sy

                JonBJ KroMignonK 2 Replies Last reply
                0
                • SPlattenS SPlatten

                  @KroMignon , Why is Qt avoid exception usage, if there is an error then there should be a mechanism for finding out what was wrong.

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

                  @SPlatten
                  The answer is to this is historical/per language. C, and then C++, used function return results to indicate errors, not exceptions. (Exceptions are regarded as "expensive" in C++, but that's only one reason.) It's not always true now --- some C++ libraries do use exceptions --- but plenty stick with that approach. Qt is just following that pattern, which is not unreasonable for C++. Some other languages, e.g. C# or Python, tend to raise exceptions, as you prefer. That's just how it is.

                  1 Reply Last reply
                  2
                  • SPlattenS SPlatten

                    @KroMignon , Why is Qt avoid exception usage, if there is an error then there should be a mechanism for finding out what was wrong.

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

                    @SPlatten said in Failing to extract value from JSON why?:

                    Why is Qt avoid exception usage

                    Again, this is documented ;)
                    https://wiki.qt.io/Coding_Conventions
                    https://doc.qt.io/qt-5/exceptionsafety.html

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

                    1 Reply Last reply
                    3
                    • SPlattenS SPlatten

                      @JonB normally I always check the return of a function, I will revisit this code.

                      JKSHJ Offline
                      JKSHJ Offline
                      JKSH
                      Moderators
                      wrote on last edited by
                      #21

                      @SPlatten said in Failing to extract value from JSON why?:

                      normally I always check the return of a function, I will revisit this code.

                      Good. So check if toString() returns a null string -- that's your error, as @JonB said.

                      the name of the function is toString, so I expect the result to be whatever is on the left converted to a string.

                      Following that logic, would you also always expect QJsonValue::toArray() to convert your value to an array, and QJsonValue::toObject() > to convert your value to an object, and QJsonValue::toInt() to convert your value to an integer? Even if the value is not an array or an object or a number?

                      @JKSH , of course, and if it couldn't then I would expect an error.

                      {
                          "a": "TruE",
                          "b": true
                      }
                      

                      Suppose robjRequest contains the above. Tell us what each of these should return:

                      1. robjRequest["a"].toArray()
                      2. robjRequest["a"].toObject()
                      3. robjRequest["a"].toString()
                      4. robjRequest["a"].toInt()
                      5. robjRequest["a"].toBool()
                      6. robjRequest["b"].toArray()
                      7. robjRequest["b"].toObject()
                      8. robjRequest["b"].toString()
                      9. robjRequest["b"].toInt()
                      10. robjRequest["b"].toBool()

                      Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                      SPlattenS 1 Reply Last reply
                      0
                      • JKSHJ JKSH

                        @SPlatten said in Failing to extract value from JSON why?:

                        normally I always check the return of a function, I will revisit this code.

                        Good. So check if toString() returns a null string -- that's your error, as @JonB said.

                        the name of the function is toString, so I expect the result to be whatever is on the left converted to a string.

                        Following that logic, would you also always expect QJsonValue::toArray() to convert your value to an array, and QJsonValue::toObject() > to convert your value to an object, and QJsonValue::toInt() to convert your value to an integer? Even if the value is not an array or an object or a number?

                        @JKSH , of course, and if it couldn't then I would expect an error.

                        {
                            "a": "TruE",
                            "b": true
                        }
                        

                        Suppose robjRequest contains the above. Tell us what each of these should return:

                        1. robjRequest["a"].toArray()
                        2. robjRequest["a"].toObject()
                        3. robjRequest["a"].toString()
                        4. robjRequest["a"].toInt()
                        5. robjRequest["a"].toBool()
                        6. robjRequest["b"].toArray()
                        7. robjRequest["b"].toObject()
                        8. robjRequest["b"].toString()
                        9. robjRequest["b"].toInt()
                        10. robjRequest["b"].toBool()
                        SPlattenS Offline
                        SPlattenS Offline
                        SPlatten
                        wrote on last edited by
                        #22

                        @JKSH , this is just silly, the name of the function is toSomething, so the name implies that it will convert whatever to the 'something', at least that is exactly how I would code it and expect it to work.

                        Kind Regards,
                        Sy

                        JKSHJ kshegunovK 2 Replies Last reply
                        0
                        • SPlattenS SPlatten

                          @JKSH , this is just silly, the name of the function is toSomething, so the name implies that it will convert whatever to the 'something', at least that is exactly how I would code it and expect it to work.

                          JKSHJ Offline
                          JKSHJ Offline
                          JKSH
                          Moderators
                          wrote on last edited by JKSH
                          #23

                          @SPlatten said in Failing to extract value from JSON why?:

                          @JKSH , this is just silly, the name of the function is toSomething, so the name implies that it will convert whatever to the 'something', at least that is exactly how I would code it and expect it to work.

                          I don't understand how you expect toArray() to work on "TruE" or true.

                          Consistency in an API is important. QJsonValue::toArray() only works on 'something' when that something is an array. Likewise, QJsonValue::toString() only works on 'something' when that something is a string.

                          Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                          SPlattenS 1 Reply Last reply
                          2
                          • JKSHJ JKSH

                            @SPlatten said in Failing to extract value from JSON why?:

                            @JKSH , this is just silly, the name of the function is toSomething, so the name implies that it will convert whatever to the 'something', at least that is exactly how I would code it and expect it to work.

                            I don't understand how you expect toArray() to work on "TruE" or true.

                            Consistency in an API is important. QJsonValue::toArray() only works on 'something' when that something is an array. Likewise, QJsonValue::toString() only works on 'something' when that something is a string.

                            SPlattenS Offline
                            SPlattenS Offline
                            SPlatten
                            wrote on last edited by
                            #24

                            @JKSH , thanks, I really can't be bothered to debate this any further.

                            Kind Regards,
                            Sy

                            1 Reply Last reply
                            0
                            • SPlattenS SPlatten

                              @JKSH , this is just silly, the name of the function is toSomething, so the name implies that it will convert whatever to the 'something', at least that is exactly how I would code it and expect it to work.

                              kshegunovK Offline
                              kshegunovK Offline
                              kshegunov
                              Moderators
                              wrote on last edited by
                              #25

                              @SPlatten said in Failing to extract value from JSON why?:

                              @JKSH , this is just silly, the name of the function is toSomething, so the name implies that it will convert whatever to the 'something', at least that is exactly how I would code it and expect it to work.

                              No, it isn't that silly, actually it's very much on point.

                              An API, which is what Qt provides, is a contract (the technical idiom is "Design by contract") - you give us this, and we give you that in exchange. You broke the contract, and you didn't bother to read the contract, and that's all fine with me, but to add insult to injury - you're claiming it's not worth reading the contract. Sorry, that ain't gonna fly!

                              If you're not up to speed on what I'm babbling about, well the documentation is that contract, if a function name was all and enough we wouldn't bother to write documentation at all.

                              Read and abide by the Qt Code of Conduct

                              1 Reply Last reply
                              1

                              • Login

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