我有一个rails应用程序。我从第三方API获得JSON。我想修改它以便能够将适当的JSON发送到另一个API。我能够使用JSON.parse对它进行哈希处理,但我无法正确修改哈希值,而且我不知道将其转回JSON的首选方法。
在get_own_events method
我有result array
(代码正常工作直到此)。现在我尝试提取一些属性并返回新的formatted_result数组,该数组只包含必要的格式化属性(我不需要原始结果数组)。
如何返回/创建正确的formatted_result array of hashes
,然后将其转回JSON?在目前的代码中,我得到了原始哈希,而不是我想要创建的新哈希。
控制器
@google = @user.socials.where(provider: "google_oauth2").first
@results_own = get_own_events(@google)
respond_to do |format|
format.html
format.json { render json: @results_own }
end
方法
def get_own_events(social_object)
client = init_google_api_calendar_client(social_object)
old_token = client.authorization.access_token
service = client.discovered_api('calendar', 'v3')
result_raw = client.execute(
:api_method => service.events.list,
:parameters => { 'calendarId' => social_object.email,
'timeMin' => "2015-12-27T00:00:00+00:00",
'timeMax' => "2016-01-30T00:00:00+00:00" },
:headers => {'Content-Type' => 'application/json'})
result = JSON.parse(result_raw.body)['items']
formatted_result = result.each do |event|
title = event['summary']
if event['start']['dateTime']
start_time = event['start']['dateTime'].to_datetime.rfc822
end
if event['end']['dateTime']
end_time = event['end']['dateTime'].to_datetime.rfc822
end
if event['start']['date'] && event['end']['date'] && (event['start']['date'] != event['end']['date'])
all_day = true
start_allday_date = event['start']['date'].to_datetime.rfc822
end_allday_date = event['end']['date'].to_datetime.rfc822
end
formatted_event = {}
formatted_event['title'] = title
formatted_event['start'] = start_time || start_allday_date
formatted_event['end'] = end_time || end_allday_date
formatted_event['allDay'] = all_day || false
return formatted_event
end
return formatted_result
end
答案 0 :(得分:1)
如果您要尝试填充新收藏集,请使用map
代替each
。因此,formatted_result = result.each do |event|
应为formatted_result = result.map do |event|
。
答案 1 :(得分:1)
将.each更改为.map可以解决您的问题,并在最后删除return formatted_result
,因为您不需要它在Ruby中,因为它是你方法中的最后一件事就是
更改此
formatted_result = result.each do |event|
...
return formatted_event
end
return formatted_result
到这个
result.map do |event|
...
formatted_event
end