如何将此json API输出保存到数据库?

时间:2016-10-12 21:27:26

标签: json ruby

如何将此json API输出保存到数据库?

JSON输出如下:

[{"id"=>758426,
  "email"=>"sender@email.com",
  "created_at"=>"2014-09-23T16:23:56Z",
  "updated_at"=>"2014-09-23T16:23:58Z",
  "status"=>"Customer",
  "custom_status"=>nil,
  "first_name"=>"Name",
  "last_name"=>"Name",
  "latest_visitor"=>
   {"id"=>13940436, "tracking_code"=>"f29a780c-615a-41df-a2b1-72e5af2c466b"},
  "url"=>{"id"=>2452457, "url"=>"http://www.website.com/#_l_1a"},
  "referrer"=>nil,
  "affiliate"=>{"id"=>35521, "email"=>"sender@email.com"},
  "campaign"=>nil,
  "search_term"=>nil,
  "tracking_code"=>"f29a780c-615a-41df-a2b1-72e5af2c466b"},
 {"id"=>758845,
  "email"=>"sender@email.com",
  "created_at"=>"2014-09-23T19:27:53Z",
  "updated_at"=>"2016-03-31T19:42:17Z",
  "status"=>"Cancelled",
  "custom_status"=>"",
  "first_name"=>"Name",
  "last_name"=>"Name",
  "latest_visitor"=>
   {"id"=>14302036, "tracking_code"=>"d61e4f25-59ac-4e9a-b818-d5bc4ad73d62"},
  "url"=>nil,
  "referrer"=>nil,
  "affiliate"=>{"id"=>35579, "email"=>"sender@email.com"},
  "campaign"=>nil,
  "search_term"=>nil,
  "tracking_code"=>"d61e4f25-59ac-4e9a-b818-d5bc4ad73d62"}]

我的问题是返回的数组没有名称来引用包含的对象,因此我不知道如何使用它来获取字段并保存它们。

我保存数据的尝试如下:

  endpoint = 'https://api.leaddyno.com/v1/leads'
  ## API key
  request = {:params => {:key => Rails.application.secrets.LEADDYNO_PRIVATE, page: 1}}
  ## Parse JSON
  response = JSON.parse(RestClient.get endpoint, request)

  response.each do |item|
    LeaddynoLead.create(
      leaddyno_lead_id: item['id'],
      email: item['email'],
      first_name: item['first_name'],
      last_name: item['last_name'],
      latest_visitor_id: item['latest_visitor']['id'],
      latest_visitor_code: item['latest_visitor']['tracking_code'],
      url: item['url']['url'],
      referrer_id: item['referrer']['id'],
      referrer_url: item['referrer']['url'],
      leaddyno_affiliate_id: item['affiliate']['id'],
      leaddyno_affiliate_email: item['affiliate']['email'],
      search_term: item['search_term']['term'],
      search_engine: item['search_term']['search_engine'],
      leaddyno_tracking_code: item['tracking_code'],
      created_at: item['created_at'],
      updated_at: item['updated_at']
      )
      sleep 0.5
  end

这是错误:

lib/dyno.rb:30:in `block in <top (required)>': undefined method `[]' for nil:NilClass (NoMethodError)
    from lib/dyno.rb:21:in `each'
    from lib/dyno.rb:21:in `<top (required)>'

这一行:referrer_id: item['referrer']['id'],

1 个答案:

答案 0 :(得分:0)

在您的示例哈希中,search_termnil,因此此行将失败:

search_term: item['search_term']['term']

您可以通过以下方式防范item['search_term']为零:

search_term: item.fetch('search_term', {}).fetch('term', nil)

您可能在哈希中遇到与其他值类似的问题。