Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. QML and JSON
Forum Updated to NodeBB v4.3 + New Features

QML and JSON

Scheduled Pinned Locked Moved QML and Qt Quick
23 Posts 12 Posters 54.3k Views 1 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.
  • D Offline
    D Offline
    DenisKormalev
    wrote on last edited by
    #12

    SimonJudge, all depends on your JSON size. If it is not big, than JS way is ok for you. But if it contains a lot of elements, then using c++ will be better.

    1 Reply Last reply
    0
    • L Offline
      L Offline
      luizpaulo
      wrote on last edited by
      #13

      Hey a good Qt/C++ JSON parser is avaliable with a LGPL licence: http://qjson.sourceforge.net/
      Might be what you need.

      1 Reply Last reply
      0
      • F Offline
        F Offline
        fcrochik
        wrote on last edited by
        #14

        [quote author="luizpaulo" date="1291470389"]Hey a good Qt/C++ JSON parser is avaliable with a LGPL licence: http://qjson.sourceforge.net/
        Might be what you need.[/quote]

        I saw it when I was working on a simple json parser but decided against it. Depending on the task you can get the same result w/o any additional dependencies - just using the script module.

        Certified Specialist & Qt Ambassador <a href="http://www.crochik.com">Maemo, Meego, Symbian, Playbook, RaspberryPi, Desktop... Qt everywhere!</a>

        1 Reply Last reply
        0
        • D Offline
          D Offline
          dridk
          wrote on last edited by
          #15

          Hello here is my point of view! I tested everything! XMLModel, javascript XML parser, C++ side parser etc...

          Do Not use C++ Json parser : Because exchange data between c++ and QML is slow

          Make a Javascript parser ! It's more easy with eval ! Here is an example :

          Json data
          @
          {"index":["all"],"flux":{"all":[{"data":{"title":"boris","icon":"icon.png"}]}}
          @

          QML side : main.qml
          @
          import QtQuick 1.0
          import "parser.js" as JS

          Item {
          id:root
          width: 360
          height: 640

          Component.onCompleted: JS.load()
          
          
          ListModel {  id:listModel }
          
          ListView {
              id:view
              anchors.fill:parent
              model : listModel
              delegate: Rectangle {
                   width:parent.width
                   height:80
                   Text {
                   anchors.center:parent
                   text: title
                   }
                 
              }
          }
          

          }
          @

          javascript side : parser.js

          @
          function load() {

          listModel.clear();
          var xhr = new XMLHttpRequest();
          

          xhr.open("GET","http://data.json",true);
          xhr.onreadystatechange = function()
          {
          if ( xhr.readyState == xhr.DONE)
          {
          if ( xhr.status == 200)
          {
          var jsonObject = eval('(' + xhr.responseText + ')');
          loaded(jsonObject)
          }
          }
          }
          xhr.send();
          }

          function loaded(jsonObject)
          {
          for ( var index in jsonObject.flux.all )
          {
          listModel.append({
          "title" : jsonObject.flux.all[index].data["title"],
          "icon" : jsonObject.flux.all[index].data["icon"]});
          }

          // get directly the json object. Should work but not tested
          //listModel.append({jsonObject.flux.all});

          }
          @

          Nothing in Biology Makes Sense Except in the Light of Evolution

          1 Reply Last reply
          0
          • F Offline
            F Offline
            fcrochik
            wrote on last edited by
            #16

            It is a little surprising to me that you found that exchanging data between C++ and QML to be slow.

            I can imagine that maybe the C++ xml parser you tried is slow but I can't imagine creating the model in c++ can be any slower than creating it using Javascript.

            Another scenario I can imagine it would slow things is if you are adding elements to a model that is already in use.

            I am just curious of the why...

            Certified Specialist & Qt Ambassador <a href="http://www.crochik.com">Maemo, Meego, Symbian, Playbook, RaspberryPi, Desktop... Qt everywhere!</a>

            1 Reply Last reply
            0
            • D Offline
              D Offline
              dridk
              wrote on last edited by
              #17

              That what I m thinking before! But a a guy said me that, and I trust him ... He said me C++ parsing is faster, but exchanging between binary and script is slower.

              So, no matter, the javascript method is a little bit more easy than creating a c++ model ! :)

              Nothing in Biology Makes Sense Except in the Light of Evolution

              1 Reply Last reply
              0
              • R Offline
                R Offline
                remy_david
                wrote on last edited by
                #18

                I am also not so happy with the performances of my C++ model but I can't precisely say what's slowing down.

                1 Reply Last reply
                0
                • AlicemirrorA Offline
                  AlicemirrorA Offline
                  Alicemirror
                  wrote on last edited by
                  #19

                  Hi to all,

                  I see that the interest in json parsing is always present. I tried to manage qjson but it seems too complex for what can be done and I have developed a method that I am experiencing very efficient and reliable. It concerns of a C++ class and a very short function in js to be used by QML. If someone is interested I can explain it in details in a wiki page. For now the method is integrated in a project but it will be one of the new features of Qt-Complex 2.0 that I am preparing.

                  Take a look to http://projects.developer.nokia.com/pricemyhouse.

                  Enrico Miglino (aka Alicemirror)
                  Balearic Dynamics
                  Islas Baleares, Ibiza (Spain)
                  www.balearicdynamics.com

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    peppelorum
                    wrote on last edited by
                    #20

                    Please don't use eval when parsing json-data, you are actually running the code, so if something nasty is in the reply you get, well...

                    I've made a small library that plays nice with QML, for making the whole ajax-thingie a bit easier, you can check it out at https://github.com/peppelorum/ajaxmee

                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      Chuck Gao
                      wrote on last edited by
                      #21

                      I think the simplest way to parse and turn json data to C++ model is using QScriptEngine. Please see:
                      @
                      QScriptValue json = m_scriptEngine->evaluate("JSON.parse").call(QScriptValue(), QScriptValueList() << jsonString);
                      QVariantList xxxList = json.toVariant().toList();
                      or
                      QVariantMap xxxMap = json.toVariant().toMap();
                      .....
                      Then, do parse
                      .....
                      @

                      And, in the code, m_scriptEngine is your QScriptEngine, and jsonString is your json data

                      Chuck

                      1 Reply Last reply
                      0
                      • F Offline
                        F Offline
                        fcrochik
                        wrote on last edited by
                        #22

                        QML "includes" a JSON parser. You can just use, without having to include anything:

                        @var obj = JSON.parse( myJSONString );@

                        "See json.org for more details":http://www.json.org/js.html

                        Of course eval can do the trick as well but it is risky and the JSON parser maybe optimized.

                        Certified Specialist & Qt Ambassador <a href="http://www.crochik.com">Maemo, Meego, Symbian, Playbook, RaspberryPi, Desktop... Qt everywhere!</a>

                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          kromain
                          wrote on last edited by
                          #23

                          For anybody still interested, I've just published a JSONListModel component that works just like XMLListModel, but for JSON data instead. It's all pure QML/Javascript, and it even supports queries via JSONPath (XPath for JSON).

                          You can read more about it there: "Devnet article":http://qt-project.org/wiki/JSONListModel

                          Romain Pokrzywka
                          KDAB - http://www.kdab.com

                          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