我看到两个问题:
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
更新了 Job,它将persons
数组发送到 Dashing:
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 格式不正确。Dashing 的 List 小部件正在侦听具有“label”和“value”键的对象数组。每个人都是一个单独的 JSON 对象,这个人的名字就是你的“标签”值,他们的状态就是他们的“价值”值。
这是 List 小部件中的列表项 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"
}
因此,要在列表中显示 Mike 和 Jon 的状态,您需要一个包含两个 JSON 对象的数组:
[
{
"label": "Mike",
"value": "Here"
},
{
"label": "Jon",
"value": "Out"
}
]
此数组将是您的数据对象中的“项目”键的“值”,这些数据对象将发送到您的列表小部件:
{
"items": [
{
"label": "Mike",
"value": "Here"
},
{
"label": "Jon",
"value": "Out"
}
]
}