Я вижу две проблемы:
1) Вы сена динь неверный объект:
response = JSON.parse(json)
name_list[people] = {label: response.keys, value: response.keys[]}
send_event('whosHere', { items: response.values })
name_list[people]
Ваш результат предполагается обработать ваш JSON, но вы отправляете response.values
вместо этого.
response
Ваш обработанный объект JSON возвращен. Вы должны перебрать response
построить массив объектов JSON, чтобы отправить в свой список:
# new empty array of persons each time job is run
persons = []
# since your JSON file is single JSON object, using names for keys
person_names = response.keys
# for each name, do this
person_names.each do |name|
# use the 'name' key to get the value (their status)
person_status = response[name]
# create new Hash/JSON object for each person
# use "label" and "value" keys for Dashing List widget
person = Hash.new("label",name,"value",person_status)
# add this new person object to your persons array
persons.push(person)
end
Обновлено Работа, которая отправляет persons
массив Лихие вместо:
require 'rubygems'
require 'json'
require 'pp'
name_list = Hash.new(0)
SCHEDULER.every '10s' do
json = File.read('list.json')
response = JSON.parse(json)
persons = []
person_names = response.keys
person_names.each do |name|
person_status = response[name]
person = Hash.new("label", name, "value", person_status)
persons.push(person)
end
send_event('whosHere', { items: persons })
end
2) Ваш JSON ISN» t отформатирован правильно. Виджет «Список листинга» прослушивает массив объектов с ключами «label» и «value». Каждый человек будет индивидуальным объектом JSON, имя человека будет вашим значением «label», и их статус будет их «значением».
Вот список-элемент HTML из списка виджетов:
<li data-foreach-item="items">
<span class="label" data-bind="item.label"></span>
<span class="value" data-bind="item.value"></span>
</li>
Каждый элемент списка будет отображаться один объект JSON:
{
"label":"Mike",
"value":"Here"
}
Так, чтобы отобразить Майк и Йона статусы в списке , вам понадобится массив, содержащий два объекта JSON:
[
{
"label": "Mike",
"value": "Here"
},
{
"label": "Jon",
"value": "Out"
}
]
Этот массив будет «значением», для вашего «элемента» в вашем объекте данных, который отправляется в ваш виджет «Избранное»:
{
"items": [
{
"label": "Mike",
"value": "Here"
},
{
"label": "Jon",
"value": "Out"
}
]
}