Parsing JSON in Qt C++ blackberry 10

2019-06-13 00:32发布

问题:

This is My JSON text from any URL http://www.example.com/json.php

Please can any one tell me how do I parse this json and put it in an Array so that it can be modal on customized ListView?

Let me tell you that I am new to Blackberry development previously iOS developer.

I have checked this link, but not able to run it .

If any one have any complete solution(example or usage) please help me.

I downloaded the sample of JSON from developer.blackberry.com, but not able to run .

I also posted that question at this 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"
        }
    ]
}

回答1:

It's all explained in the documentation of JsonDataAccess. You'll have to do something like this:

// 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);


回答2:

This is the QML way of doing it, you don't have to touch any C++ code.

First you need to create a listview in a QML file.

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

Now you will want to populate your listview with the data from a json file. Since you are making a call to the server, you will want to send a request.

            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();
            }

And to display the values, you can use StandardListItem:

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