无法访问哈希中的数组(Google People API)

时间:2016-09-22 07:35:25

标签: ruby-on-rails google-api google-contacts google-api-ruby-client google-people

我正在使用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,而不会向我发出错误。

我做错了什么?

0 个答案:

没有答案