1

我正在使用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”数组包含每个联系人的哈希值。我要做的是遍历整个“连接”数组以显示我所有联系人姓名的列表。我完成的控制器操作如下所示:

控制器.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”字段:

视图.html.erb

<% @google_contacts.each do |contact| %>
  <%= contact['names'][0]['displayName'] %>
<% end %>

什么结果;然而, nil:NilClass错误消息的可爱的未定义方法“[]” 。当我删除[0]['displayName']时,视图会显示每个联系人的 'names' 数组的全部内容(例如):

[{"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,而不会向我抛出错误。

我究竟做错了什么?

4

0 回答 0