2015-04-06 4 views
0

Я пытаюсь создать List in Dashing, и мне удалось запустить мой внешний JSON, но у меня возникли проблемы с итерацией через него, чтобы создать новый массив JSON для отправьте его в мой виджет «Избранное». Вот текущий код:Итерация через массив JSON для листинга списка

require 'rubygems' 
require 'json' 
require 'pp' 

name_list = Hash.new({ value: 0 }) 


SCHEDULER.every '10s' do 
    json = File.read('/Users/research/inoutdash/sweet_dashboard_project/jobs/list.json') 
    response = JSON.parse(json) 

    name_list[response] = {label: response.keys, value: response.values} 
    send_event('whosHere', { items: name_list.values }) 
    puts response.keys 
    puts response.values 
end 

Вот файл мой JSON это чтение из:

{ 
    "Mike":"Here", 
    "Jon": "Out" 
} 

Выход на виджет в настоящее время выглядит следующим образом:

  1. MikeJon Здесь Out

Как правильно перебрать обработанный json response и передать его send_event?

Только в ответ на вопрос Мэтта:

Так что мне нужно, это одно событие «whosHere» со всеми значениями из файла JSON, отформатированный для списка виджетов - который нуждается в JSON формате этикетки: X, значение: Ю.

так что мне нужно сделать, это отформатировать его как массив JSON с:

label: "Mike", value: "Here" 
label: "Jon", value: "Out" 

где теперь это хранящей, как:

label: Mike,Jon, value:Here,out 
+1

Можете ли вы объяснить, что вы хотите получить? то есть, что вы хотите отправить send_event? Событие «whosHere» для каждого пользователя? Или одно событие для всех пользователей, которые «здесь», а другое для всех пользователей, которые «Out»? Что-то другое? –

ответ

0

Для этого вы можете использовать collect. Он выполняет итерацию по коллекции и возвращает Array, где каждый элемент является результатом блока.

name_list = response.collect { |(name, status)| { :label => name, :value => status } } 

# [{:label=>"Mike", :value=>"Here"}, {:label=>"Jon", :value=>"Out"}]