2

所以我正在为 QML 使用 JSONListModel,我需要帮助来解析这个JSON 文件

这是一个获取在线玩家姓名的 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。

我想得到的是球员的名字,一个接一个。我使用通配符来获取所有名称,但是当我将文本的文本设置为模型 ("$['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

但我不能,因为节点没有名字。它们只是价值观。

有人能帮我吗?

4

1 回答 1

2

实际上,从查看JSONListModelListModel::append以及您正在解析的 JSON 来看,问题在于JSONListModel.qmlappend第 40 行的报告

jsonModel.append( jo );

在这种情况下jsonModel是一个ListModel因此append需要jo是 JSON 字典,即

myListModel.append( {"cost": 5.95, "name":"Pizza"} )

您的查询有效并且确实返回了数组,问题是内部元素不是 a 的有效形式ListModel

有两种选择:

  1. 请求/更改源 JSON 数据以符合名称/值编码,或者,
  2. 请求/修复 JSONListModel 以将值提供为匿名名称或字符串。

综上所述,对于#2,这似乎已经在 J​​SONListModel 中报告过,目前尚未解决。

希望这能回答您的问题,并至少为您提供一些未来的选择。

于 2014-02-05T00:51:13.153 回答