所以我正在使用JSONListModel进行QML,我需要帮助解析这个JSON File
这是一个获取在线玩家姓名的Minecraft服务器查询。但是,我在将每个节点添加到List委托时遇到了问题。
这是我的代码:
ListView {
JSON.JSONListModel {
source: "http://minecraft-api.com/v1/players/?server=darkcrest.cf.gs"
query: "$['players'][*]"
id: playerNames
}
anchors.top: players.bottom
anchors.topMargin: units.gu(1)
model: playerNames.model
delegate: Item {
Text {
text: model
}
}
}
正如您所看到的,我有一个查询,它是我要查看的元素的JSONPath。
我想得到的是球员的名字,一个接一个。我使用通配符获取所有名称,但是当我将Text的文本设置为model(“$ ['players'] [0-x]”)时,我得到:
file:///home/brendan/UTouch-Apps/ServerStatus/JSONListModel/JSONListModel.qml:15:32: QML ListModel: append: value is not an object
指向该行:
property ListModel model : ListModel { id: jsonModel }
在JSONListModel.qml。
所以是的,我猜我的道路是错的。我不知道如何处理数组,例如链接中JSON文件中的数组。
如果文件类似于:
{
players: [
"name": "Whatever1234",
"name": "Person987"
]
}
我可以做到
text: model.name
但我不能,因为节点没有名字。它们只是价值观。
有人可以帮助我吗?
答案 0 :(得分:2)
实际上,通过查看JSONListModel,ListModel::append以及您正在解析问题的JSON,报告的append
位于line 40 in JSONListModel.qml
jsonModel.append( jo );
在这种情况下,jsonModel
是ListModel
,因此append
要求jo
为JSON字典,即
myListModel.append( {"cost": 5.95, "name":"Pizza"} )
您的查询有效且返回数组问题是内部元素不在ListModel
的有效格式中。
有两种选择:
所有这一切,对于#2,它看起来已经是reported in JSONListModel,目前尚未解决。
希望能回答你的问题,至少为你提供一些选择。