如何将此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'],
答案 0 :(得分:0)
在您的示例哈希中,search_term
为nil
,因此此行将失败:
search_term: item['search_term']['term']
您可以通过以下方式防范item['search_term']
为零:
search_term: item.fetch('search_term', {}).fetch('term', nil)
您可能在哈希中遇到与其他值类似的问题。