2015-11-08 71 views
0

我试图使用红宝石创建一个样本批量上传到Keen.io。从自己的文件:为批量Keen.io上传格式化JSON

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输出,但我似乎无法弄清楚如何/在哪里?

谢谢!

回答

1

如果您没有在创建的数组上调用.to_json,这应该可行。

尝试,

Keen.publish_batch(:jobs => jobs_array)

,而不是什么是目前规定

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

希望这有助于!

+0

我作出改变,让'{ “工作”=> [{ “成功”=>假, “错误”= > {“name”=>“InvalidPropertyNameError”,“description”=>“一个事件应该是属性的JSON对象。”}} – cman77

+0

尝试删除有关JSON的所有内容。 jobs_array应该只有Hashes推入它,并且publish_batch不需要to_json。 – Elof

+0

非常感谢@Elof!我只需要放下支架。在答案中提供完整代码以防止其他人遇到问题。 – cman77

0

这里是万一答案可以帮助别人....

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)