【问题标题】:JSONPath / QML - Get Elements in String ArraysJSONPath / QML - 获取字符串数组中的元素
【发布时间】:2014-02-04 18:29:54
【问题描述】:

所以我正在为 QML 使用 JSONListModel,我需要帮助来解析这个 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。

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

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

有人可以帮我吗?

【问题讨论】:

    标签: json qml jsonpath


    【解决方案1】:

    实际上,从查看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 以提供匿名名称或字符串形式的值。

    说了这么多,对于 #2 来说,这似乎已经是 reported in JSONListModel 并且目前尚未解决。

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

    【讨论】:

    • 感谢您的回答!我将研究这两个选项并尝试解决我的问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2017-11-27
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多