0

这是JSON来自任何 URL http://www.example.com/json.php的我的文本

请任何人告诉我如何解析这个 json 并将其放入一个数组中,以便它可以在自定义 ListView 上成为模态?

让我告诉你,我以前是 iOS 开发人员,是 Blackberry 开发的新手。

我已经检查了这个链接,但无法运行它。

如果有人有任何完整的解决方案(示例或用法),请帮助我。

我从 developer.blackberry.com 下载了示例JSON,但无法运行。

我也在这个链接上发布了这个问题

{
    "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"
        }
    ]
}
4

2 回答 2

3

这一切都在JsonDataAccess. 你必须做这样的事情:

// 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);
于 2013-07-30T12:38:18.343 回答
1

这是 QML 的做法,您不必接触任何 C++ 代码。

首先,您需要在 QML 文件中创建一个列表视图。

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

现在,您将希望使用 json 文件中的数据填充您的列表视图。由于您正在调用服务器,因此您需要发送请求。

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

要显示值,您可以使用StandardListItem

StandardListItem {
                    title: ListItemData.offer_id
                    description: ListItemData.offer_type
                    status: ListItemData.member_id
                }
于 2013-07-30T16:04:16.123 回答