首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将json解析为listmodel

将json解析为listmodel
EN

Stack Overflow用户
提问于 2017-03-20 05:56:42
回答 1查看 3.6K关注 0票数 0

我部分地成功地将json解析到我的qml,但只有部分成功。我可以通过countryCode ()很好地输出countryName和console.log,最终目标仍然是将json解析的数据追加到listmodel中。仍然不能用年份和实际数据部分输出bigmac_index。

显然,他们尝试过不同的解决方案,试图从被试中应用给出的答案,但都没有成功。将感谢工作解决方案:)

json部分:[{ "countryCode":"fi","countryName":“芬兰”,"bigmac_index":{“年份”:“2013年”,“数据”:"5.27“},{”年份“:”2012年““数据”:"4.55“},{”年份“:"2011",”数据“:"5.38”}]

下面是我使用的函数:

代码语言:javascript
复制
    function request(url, callback) {
        var xhr = new XMLHttpRequest();

        console.log("xhr.send executed")

        xhr.onreadystatechange = (function()
        {
            console.log("xhr readystate ", xhr.readyState)
            if(xhr.readyState == 4 && xhr.status == 200)
                {
                    console.log("readyState == 4, starting to parse")
                    var parseData = JSON.parse(xhr.responseText);

                    for ( var index in parseData)
                    {
                  console.log("countrycode, ", parseData[index].countryCode)              
                  console.log("countryName, ", parseData[index].countryName)
                  console.log("datakey, ", parseData[index].bigmac_index) 

                  //Attemp to parse to ListModel

                  lmodel.append
                  ({
                          "countryCode" : parseData.countryCode,
                          "countryName" : parseData[index].countryName,
                          "datakey" : parseData[index].bigmac_index
                   })}
                }

            else
            {
                console.log("readyState, ", xhr.readyState)
            }
        }

        );
        xhr.open('GET', url, true);
        xhr.send();
    }

json结构+ api数据:http://blog.inqubu.com/inqstats-open-api-published-to-get-demographic-data

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-20 07:20:47

欢迎来到这里@JRii!首先,在问问题之前,你应该先阅读this页面。至于你的问题--你所做的一切都是对的,但你没有提供你的QML代码,所以不可能理解你做错了什么。无论如何,这应该是可行的:

假设数据是:

代码语言:javascript
复制
[
    {
        "countryCode": "us",
        "countryName": "USA",
        "population": [
            {
                "year": "2014",
                "data": "318857056"
            },
            {
                "year": "2013",
                "data": "316497531"
            },
            {
                "year": "2012",
                "data": "314112078"
            },
            {
                "year": "2011",
                "data": "311721632"
            },
            {
                "year": "2010",
                "data": "309347057"
            }
        ]
    }
]

应该解析和显示数据的QML代码:

代码语言:javascript
复制
ListView {
    anchors.fill: parent
    model: ListModel { id: model}
    delegate: Text { text: "[" + year + "]: " + population }
    Component.onCompleted: {
        var xhr = new XMLHttpRequest;
        xhr.open("GET", "http://inqstatsapi.inqubu.com/?api_key=YOURKEYHERE&data=population&countries=us");
        xhr.onreadystatechange = function() {
            if (xhr.readyState === XMLHttpRequest.DONE) {
                var data = JSON.parse(xhr.responseText);
                model.clear();
                var list = data[0]["population"];
                for (var i in list) {
                    model.append({year: list[i]["year"], population: list[i]["data"]});
                }
            }
        }
        xhr.send();
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42896706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档