lundi 3 décembre 2012

Parser du Json façon Qt

Je vais vous proposer 2 façons de lire et écrire du JSON en C++. La première méthode utilise l'API cascade avec la classe JsonDataAccess. La seconde, est une methode perso, que je prefère, car elle depend uniquement de Qt, et permet donc d'être réutilisé ailleurs.
Avec ces 2 méthodes, le code JSON sera convertit en QVariant en respectant les types suivant :
    JSON Type             QT Type
   ---------         -----------------
   null              empty QVariant
   int               QVariant(Int64)
   uint              QVariant(UInt64)
   real              QVariant(double)
   string            QVariant(const char*)
   boolean           QVariant(bool)
   array             QVariant(QVariantList)
   object            QVariant(QVariantMap)


Voyons maintenant, comment parser le code suivant : 


Methode JsonDataAccess :

Pour être utiliser, la classe JsonDataAccess nécessite la librairie -lbbdata.  Donc depuis votre fichier *.pro, ajouter LIBS += -lbbdata
Et n'oubliez pas d'inclure le header et d'utiliser le namespace.

#include <bb/data/JsonDataAccess>
using namespace bb::data;

Et pour récupérer votre QVariant : 


Methode QxtJson : 

Qxt est une librairie tierce sous licence LGPL 2.1. Je vous rassure, je ne vais pas vous demander de linker cette librairie. Télécharger juste ces deux fichiers et ajoutez les à votre projet :

Maintenant, grâce à qxtjson, vous allez pouvoir parser et écrire du json en 1 ligne : 



Astuce ou la magie de QML:

Vous avez vos datas sous forme d'un QVariant. Vous voulez maintenant les afficher dans votre page Qml. Plutôt que de créer des fonctions d'appel C++, nous allons directement envoyer notre QVariant au contexte qml, qui s'occupera de les transformer en tableau javascript.

qml->setContextProperty("myData",data);

 Et depuis QML, accedé à vos données en faisant simplement :

Label { text: myData.name }


Aucun commentaire:

Enregistrer un commentaire