所以我正在使用 QML 的 JSONListModel,并且我需要帮助解析此 JSON File
这是一个 Minecraft 服务器查询,可获取在线玩家的姓名。但是,我在将每个节点添加到列表委托(delegate)时遇到问题。
这是我的代码:
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。
我想要得到的是球员的名字,一个接一个。我使用通配符来获取所有名称,但是当我将文本的文本设置为 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
但我不能,因为节点没有名称。它们只是值(value)观。
有人可以帮助我吗?
最佳答案
实际上从看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
的有效形式。
有两个选项:
- 请求/更改源 JSON 数据以符合名称/值编码,或者,
- 请求/修复 JSONListModel 以提供匿名名称或字符串形式的值。
综上所述,对于 #2 来说,看起来已经是 reported in JSONListModel目前尚未解决。
希望这能回答您的问题,并至少为您提供一些 future 的选择。
关于JSONPath/QML - 获取字符串数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560483/