我正在使用Google People API在我的Rails 5应用中填充用户的联系人,但我不认为此问题特定于此特定API。
总而言之,我能够成功调用API并获取所有Google联系人的JSON响应。
以下是我在我的一个控制器操作中对API进行的调用:
@response = HTTParty.get('https://people.googleapis.com/v1/people/me/connections?requestMask.includeField=person.names%2Cperson.emailAddresses%2Cperson.phoneNumbers&access_token=' + @token,
:headers =>{'Content-Type' => 'application/json'} )
接下来,在同一个控制器文件中,我解析JSON响应:
@parsed_response = JSON.parse(@response.body)
这提供了如下所示的输出(我已将其简化为共享):
{"connections"=>
[{
"resourceName"=>"people/c6173361945899061031", "etag"=>"FB4d1LieX4k=",
"names"=>[{"metadata"=>{"primary"=>true, "source"=>{"type"=>"CONTACT", "id"=>"55ac2f1281953f27"}}, "displayName"=>"John Smith", "familyName"=>"Smith", "givenName"=>"John", "displayNameLastFirst"=>"Smith, John"}],
"phoneNumbers"=>[{"metadata"=>{"primary"=>true, "source"=>{"type"=>"CONTACT", "id"=>"55ac2f1281953f27"}}, "value"=>"+18083416177", "canonicalForm"=>"+18083416177", "type"=>"mobile", "formattedType"=>"Mobile"}]
}],
"nextPageToken"=>"CGQQm7Ohg", "nextSyncToken"=>"CPvkoIP1KhIBMRiGE"}
上面解析的JSON包含我的某个联系人的信息,但在实际文件中,“connections”数组包含每个联系人的哈希值。我要做的是遍历整个“连接”数组,以显示我所有联系人姓名的列表。我完成的控制器操作如下所示:
controller.rb
@response = HTTParty.get('https://people.googleapis.com/v1/people/me/connections?requestMask.includeField=person.names%2Cperson.emailAddresses%2Cperson.phoneNumbers&access_token=' + @token,
:headers =>{'Content-Type' => 'application/json'} )
@parsed_response = JSON.parse(@response.body)
@google_contacts = @parsed_response['connections']
现在,我为每个联系人创建一个哈希数组(@google_contacts)。然后,在我的视图中,我尝试迭代该哈希以拉出每个联系人的'displayName'字段:
view.html.erb
<% @google_contacts.each do |contact| %>
<%= contact['names'][0]['displayName'] %>
<% end %>
结果如何;但是,对于nil:NilClass 错误消息是可爱的未定义方法`[]'。当我删除 [0] ['displayName'] 时,视图会显示每个联系人的“名称”数组的完整内容(例如):
[{"metadata"=>{"primary"=>true, "source"=>{"type"=>"CONTACT", "id"=>"55ac2f1281953f27"}}, "displayName"=>"John Smith", "familyName"=>"Smith", "givenName"=>"John", "displayNameLastFirst"=>"Smith, John"}]
当我尝试仅提取阵列中的第一个联系人时,以下工作没有任何问题:
<% @google_contacts[0,1].each do |contact| %>
<%= contact['names'][0]['displayName'] %>
<% end %>
我无法成功为数组中的多个联系人提取联系人的displayName,而不会向我发出错误。
我做错了什么?