Как я могу создать JSON-массив JSON-объектов в ruby ​​из цикла - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь перебрать некоторые video объекты и пытаюсь создать массив JSON, который выглядит следующим образом:

[{"event_name":"video_completed","object_id":123456789}]

Я создал метод для этого:

def self.getEngagementRules(videos)

    rules = []

    videos.each do |video|

        rule = {
            event_name: "video_completed",
            object_id: video.image_hash.to_i
        }

        rules << rule.to_json
    end

    rules
end

Я создаю хэши, затем превращаю их в JSON и добавляю их в мой массив rules, но когда я запускаю:

puts rules

я получаю {"event_name":"video_completed","object_id":123456789}

вместо [{"event_name":"video_completed","object_id":123456789}]

Какой правильный способ сделать это, чтобы я мог просмотреть несколько видео и получить желаемый результат.

Он должен иметь возможность обрабатывать несколько видео и выводить:

[{"event_name":"video_completed","object_id":123456789}, {"event_name":"video_completed","object_id":123456789}]

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы хотите сначала создать массив ruby, а затем преобразовать его в JSON:

rules = videos.map do |video|
  {
    event_name: "video_completed",
    object_id: video.image_hash.to_i
   }
end
rules.to_json

.each следует использовать только в том случае, если вас интересуют только побочные эффекты цикла, а не возвращаемое значение.

В противном случае вы должны использовать .map, .inject, .each_with_object и т. Д., Которые указывают другим программистам, что вы заботитесь о возвращаемом значении (и знаете, что вы делаете).

0 голосов
/ 16 ноября 2018

Ваш код работает правильно, у вас есть массив, но puts печатает каждый элемент массива в отдельной строке

puts [1, 2, 3]

1
2
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...