0

Ceci est mon JSON texte à partir d'une URL http://www.example.com/json.phpParsing JSON dans Qt C++ BlackBerry 10

S'il vous plaît quelqu'un peut me dire comment puis-je analyser ce JSON et le mettre dans un tableau afin qu'il puisse être modal sur ListView personnalisé ? Permettez-moi de vous dire que je suis nouveau dans le développement de Blackberry auparavant développeur iOS.

J'ai vérifié ce link, mais je n'ai pas pu l'exécuter.

Si quelqu'un a une solution complète (exemple ou utilisation) aidez-moi s'il vous plaît.

J'ai téléchargé l'exemple de JSON à partir de developer.blackberry.com, mais impossible à exécuter.

J'ai également signalé cette question à ce link

{ 
    "status": "success", 
    "result": [ 
     { 
      "offer_id": "456", 
      "member_id": "648", 
      "offer_type": "printable", 
      "cat_name": "Health & Wellbeing", 
      "price": "50", 
      "discount": "20% Off.", 
      "title": "20% Off", 
      "quantity": "200", 
      "details": "Enjoy 20% Off any Service.", 
      "coupon_code": "45600010106", 
      "company_logo": "http://beta/files/offers/logos/", 
      "offer_image": "http://beta/files/offers/images/f4d118737e_image_456.jpg", 
      "bc_image": "http://beta/files/offers/qrcodes/qrcouponid_45600010106.png", 
      "company_address1": "Oud Metha - Mohammed Saeed Hareb Bldg. Opp. American Hospital", 
      "company_address2": "Not Available", 
      "company_city": "Not Available", 
      "company_phone": "04 357 6738 Mob: 509284567", 
      "location": "Oud Metha", 
      "company_name": "Golden House Gents Spa Club", 
      "merchant_name": "Golden House Gents Spa Club", 
      "url": "http://google.com", 
      "date_end": "2013/12/30", 
      "date_start": "2013/07/25", 
      "condition": "1. Cannot be Combined with any other offer.\r\n2. Advance booking required.\r\n3. This Voucher must be Mentioned during time of Booking.\r\n4. Not Valid on Thurs & Sat.\r\n5. Expires 31st December 2013.", 
      "rating": "0", 
      "latitude": "25.2374", 
      "longitude": "55.3117" 
     } 
    ] 
} 

Répondre

3

Il est expliqué dans la documentation de JsonDataAccess. Vous aurez à faire quelque chose comme ceci:

// Create a data model with sorting keys for title 
GroupDataModel *model = 
    new GroupDataModel(QStringList() << "title"); 

// Load the JSON data 
JsonDataAccess jda; 
QVariant list = jda.load("yourfile.json")["result"].toVariantList(); 

// Add the data to the model 
model->insertList(list.value<QVariantList>()); 

// Add your model to a ListView 
listView->setDataModel(model); 
+1

Et si je ne veux pas trier le tableau. mais je veux montrer le résultat comme venant du service Web. j'ai essayé ce GroupDataModel * model = nouveau GroupDataModel(); mais il me montre l'ordre inverse –

+1

Si la commande est juste inversée sans spécifier de clé, vous aurez juste besoin d'inverser le '' sortedAscending'' (https://developer.blackberry.com/cascades/reference/bb__cascades__groupdatamodel.html # property-sortedascending) propriété. –

1

C'est la façon QML de le faire, vous ne touchez pas à tout code C++.

Vous devez d'abord créer une vue de liste dans un fichier QML.

ListView { 
     id: listData 
     dataModel: ArrayDataModel { 
      id: theDataModel 
     } 
     .... 
} 

Maintenant, vous voulez remplir votre listview avec les données d'un fichier json. Puisque vous appelez le serveur, vous devez envoyer une demande.

  function sendRequest() { 
       console.log("DEBUG: sending request"); 
       var request = new XMLHttpRequest(); 
       request.onreadystatechange = function() { 
        // Need to wait for the DONE state or you'll get errors 
        if (request.readyState === XMLHttpRequest.DONE) { 
         if (request.status === 200) { 
          // if response is JSON you can parse it 
          var response = JSON.parse(request.responseText); 

           theDataModel.append({ 
            "offer_id": response.result.offer_id, 
            "member_id": response.result.member_id, 
            "offer_type": response.result.offer_type 
           }); 
          } 

        } else { 
          // Error 
          console.log("DEBUG: Status: " + request.status + ", Status Text: " + request.statusText);      
        } 
       } 
       // POST/GET request 
       request.open("GET", "http://www.example.com/json.php", true); 
       request.setRequestHeader("Accept", "application/json"); 
       request.send(); 
      } 

Et pour afficher les valeurs, vous pouvez utiliser StandardListItem:

StandardListItem { 
        title: ListItemData.offer_id 
        description: ListItemData.offer_type 
        status: ListItemData.member_id 
       }