Форматирование JSON для массовой загрузки Keen.io

Я пытаюсь настроить массовую загрузку образца на Keen.io с помощью ruby ​​gem. Из их документов:

Keen.publish_batch(
  :signups => [
    { :name => "Bob" },
    { :name => "Mary" }
  ],
  :purchases => [
    { :price => 10 },
    { :price => 20 }
  ]
)

Моя попытка выполнить задачу rake для создания чего-то подобного:

task backfill_keen_jobs: :environment do

   jobs_array = Array.new
   Job.last(5).each do |j|
      job_type = j.job_type.present? ? j.job_type.description : nil
      job = {
         :keen => {
            :timestamp => j.created_at.to_time.iso8601
         },
         :id => j.id,
         :title => j.title,
         :type => job_type,
         :company => j.company

      }

      jobs_array << JSON.generate(job)

   end
   puts jobs_array
   puts Keen.publish_batch(:jobs => [jobs_array.to_json])
end

Я получаю следующую ошибку:

{"jobs"=>[{"success"=>false, "error"=>{"name"=>"InvalidPropertyNameError", "description"=>"An event should be a JSON object of properties."}}]}

Я уверен, что просто как-то испортил вывод JSON, но я не могу понять, как и где?

Спасибо!


person cman77    schedule 08.11.2015    source источник


Ответы (2)


Это должно работать, если вы не вызываете .to_json для созданного вами массива.

Пытаться,

Keen.publish_batch(:jobs => jobs_array)

в отличие от того, что в настоящее время заявлено

Keen.publish_batch(:jobs => [jobs_array.to_json])

Надеюсь это поможет!

person Elof    schedule 09.11.2015
comment
Я внес это изменение и получил `{jobs=›[{success=›false, error=›{name=›InvalidPropertyNameError, description=›Событие должно быть объектом свойств JSON.}} - person cman77; 10.11.2015
comment
Попробуйте удалить все, что касается JSON. В jobs_array должны быть просто помещены хэши, а publish_batch не нуждается в to_json. - person Elof; 11.11.2015
comment
спасибо @Elof, это в значительной степени сделало это! Мне просто нужно было снять кронштейн. Полный код в ответе на случай, если он поможет кому-то еще. - person cman77; 12.11.2015

Вот ответ, если это поможет кому-то еще....

   jobs_array = Array.new
   Job.last(5).each do |j|
      job_type = j.job_type.present? ? j.job_type.description : nil
      job = {
         :keen => {
            :timestamp => j.created_at.to_time.iso8601
         },
         :id => j.id.to_i,
         :title => j.title,
         :type => job_type,
         :company => j.company
      }

      jobs_array << job

   end
   jobs_array
   Keen.publish_batch(:jobs => jobs_array)
person cman77    schedule 12.11.2015