JSONPath / QML - 在字符串数组中获取元素

时间:2014-02-04 18:29:54

标签: json qml jsonpath

所以我正在使用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

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

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

实际上,通过查看JSONListModelListModel::append以及您正在解析问题的JSON,报告的append位于line 40 in JSONListModel.qml

jsonModel.append( jo );

在这种情况下,jsonModelListModel,因此append要求jo为JSON字典,即

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

您的查询有效且返回数组问题是内部元素不在ListModel的有效格式中。

有两种选择:

  1. 请求/更改源JSON数据以符合名称/值编码或
  2. 请求/修复JSONListModel以将值作为匿名名称或字符串提供。
  3. 所有这一切,对于#2,它看起来已经是reported in JSONListModel,目前尚未解决。

    希望能回答你的问题,至少为你提供一些选择。