我部分成功地将json解析为我的qml应用程序,但只是部分成功。我可以通过console.log()输出countryCode和countryName,最终目标仍然是将json解析数据附加到listmodel。仍然无法输出bigmac_index与年份和实际数据数据部分。
显然已经尝试了不同的解决方案,并试图从主题应用给定的答案,但没有成功。将从工作解决方案中获益:)
json部分: [ { " countryCode":" fi", " countryName":"芬兰", " bigmac_index":[ { "年":" 2013", "数据":" 5.27" }, { "年":" 2012", "数据":" 4.55" }, { "年":" 2011", "数据":" 5.38" } ] } ]
以下是我正在使用的功能:
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
答案 0 :(得分:2)
欢迎来到SO,@ JRii! 首先,在提问之前,您应该阅读this页面。 至于你的问题 - 你所做的一切都是正确的,但你没有提供你的QML代码,因此无法理解你做错了什么。 无论如何应该工作:
假设数据为:
[
{
"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代码:
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();
}
}