2014-02-04 3 views
2

Так я использую JSONListModel для QML, и мне нужна помощь разбора этого JSON FileJSONPath/QML - Получить элементы в Струнных Массивах

Это сервер запросы 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 к элементу Я хочу, чтобы посмотреть.

То, что я хочу получить, это имена игроков один за другим. Я использовал подстановочные, чтобы получить все имена, но когда я установил текст тексте для моделирования («$ [„игроков“] [0-х]») я получаю:

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 

Но я не могу, потому что узлы не имеют имени. Это просто ценности.

Может кто-нибудь мне помочь?

ответ

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"}) 

Ваш запрос является действительным, и делает возвращать array проблема заключается в том, что внутренние элементы не находятся в допустимой форме для ListModel.

Есть два варианта:

  1. Запрос/изменить данные источника в формате JSON, чтобы соответствовать кодировке имя/значение или,
  2. Запрос/FIX JSONListModel, чтобы обеспечить значение в качестве анонимного имени или строки.

Все, что сказал, для # 2 похоже, что это уже было reported in JSONListModel и в настоящее время не разрешено.

Надеюсь, это ответит на ваш вопрос и по крайней мере предоставит вам некоторые варианты в будущем.

+0

Спасибо за ответ! Я рассмотрю оба варианта и попытаюсь решить мою проблему. Спасибо! – Leviathan