Ruby 如何从API提取哈希数组返回的数据

Ruby 如何从API提取哈希数组返回的数据,ruby,nokogiri,Ruby,Nokogiri,我编写了一个与Ruby API交互的小程序 我可以打印一个职位名称,但我想循环浏览所有职位名称 代码如下: require 'nokogiri' require 'indeed-ruby' client = Indeed::Client.new ("PUBLISHER_KEY_GOES_HERE") params = { :q => 'python', :l => 'vancouver', :userip => '1.2.3.4', :useragent =

我编写了一个与Ruby API交互的小程序

我可以打印一个职位名称,但我想循环浏览所有职位名称

代码如下:

require 'nokogiri'
require 'indeed-ruby'

client = Indeed::Client.new ("PUBLISHER_KEY_GOES_HERE")

params = {
  :q => 'python',
  :l => 'vancouver',
  :userip => '1.2.3.4',
  :useragent => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2)',
  :jobkeys => ["JOB_KEY_A", "JOB_KEY_B"] 
}

data = client.search(params)

# loop through all results and print the job title
data.each do |d|
  puts d["results"]["jobtitle"]
end
each循环返回此错误消息:

i.rb:23:in `[]': no implicit conversion of String into Integer (TypeError)
from i.rb:23:in `block in <main>'
from i.rb:22:in `each'
from i.rb:22:in `<main>'
这意味着我可以访问结果哈希的第0个元素,然后访问jobtitle属性

我希望循环像这样运行,并打印3个工作标题:

puts data["results"][0]["jobtitle"]
puts data["results"][1]["jobtitle"]
puts data["results"][2]["jobtitle"]
如果[I]计数器需要整数,我不确定如何将其放入循环中

以下是从Indeep API返回的数据:

{"version"=>2,
 "query"=>"python",
 "location"=>"vancouver",
 "paginationPayload"=>"",
 "radius"=>25,
 "dupefilter"=>true,
 "highlight"=>true,
 "totalResults"=>483,
 "start"=>1,
 "end"=>10,
 "pageNumber"=>0,
 "results"=>
  [{"jobtitle"=>"Junior Software Developer",
    "company"=>"LaunchCode",
    "city"=>"Portland",
    "state"=>"OR",
    "country"=>"US",
    "formattedLocation"=>"Portland, OR",
    "source"=>"LaunchCode",
    "date"=>"Fri, 03 Feb 2017 04:10:27 GMT",
    "snippet"=>
     "Familiarity with an at least one imperative (Java, JavaScript,   PHP, C#, Objective-C, C/C++, <b>Python</b>, Ruby, etc.). Don’t have a CS   degree?...",
    "url"=>
     "http://www.indeed.com/viewjob?jk=9f75f0ea8825e3a8&qd=X0KuMlb--hp3Z0o2UU7dJOXoIlOcgm8VSZO61KKa0UOtGpLfFk1WY111OhfFWzZjMBRv9LrdGhB8olLNQGabmQRFit3-lRPP9j12GNvnf88&indpubnum=4334069173238194&atk=1b87s51b1a0kqb7s",
    "onmousedown"=>"indeed_clk(this,'782');",
    "jobkey"=>"9f75f0ea8825e3a8",
    "sponsored"=>false,
    "expired"=>false,
    "indeedApply"=>false,
    "formattedLocationFull"=>"Portland, OR",
    "formattedRelativeTime"=>"2 days ago",
    "stations"=>""},
以下是输出:

Junior Software Developer
Data Scientist
Python Developer
Python Automation Developer - Hillsboro, OR
Computer Vision Engineer
Python Web Engineer
EMS Network Applications Engineer II
Software Engineer
Python Developer (full-stack)
Electrical Engineer, EMS Network Applications
因此,数据[结果]是一个数组。在ruby中,遍历数组不需要索引。你可以这样做

[1, 2, 3].each do |i|
  puts i
end
就你而言

data["results"].each do |item|
  puts item["jobtitle"]
end

是的,但是你不需要索引,每个索引都更清晰、更优雅。在Ruby中,使用像each或map这样的迭代器遍历数组是很习惯的,因为它们没有一个接一个的错误。欢迎使用堆栈溢出。请阅读。您的示例数据在语法上不正确,需要减少到演示问题所需的最低限度。请不要在文本中使用编辑或更新标记。将这些变化融入身体,就好像它们一直存在一样。如果我们需要知道的话,我们可以知道什么地方和什么时候发生了变化。
[1, 2, 3].each do |i|
  puts i
end
data["results"].each do |item|
  puts item["jobtitle"]
end