访问来自httparty响应的数据

Vic*_*tor 2 ruby-on-rails

使用httparty我可以得到以下响应:

puts Representative.find_by_zip(46544).inspect
Run Code Online (Sandbox Code Playgroud)

- >

{"results"=>[{"name"=>"Joe Donnelly", "district"=>"2", "office"=>"1218 Longworth", "phone"=>"(202) 225-3915", "link"=>"http://donnelly.house.gov/", "state"=>"IN"}]
Run Code Online (Sandbox Code Playgroud)

示例来源:http://railstips.org/blog/archives/2008/07/29/it-s-an-httparty-and-everyone-is-invited/

但我无法访问数据,例如:

Representative.find_by_zip(46544).inspect["name"] 回报 nil

如何访问此响应的各个元素?

Jor*_*ing 7

Object#inspect返回一个字符串,而不是一个哈希.你要这个:

Representative.find_by_zip(46544)['results'][0]['name']
Run Code Online (Sandbox Code Playgroud)

这是正在发生的事情:Representative#find_by_zip只用一个索引返回一个哈希: 'results'.item at 'results'是一个数组,在这种情况下只包含一个元素,因此我们[0]用来获取第一个(也是唯一的)元素.该元素本身是一个具有'name'键的哈希,它指向返回的第一个(也是唯一的)代表的名称.

当你有复杂的哈希和数组时,有时可以用更易读的方式对其进行格式化,以弄清楚如何获得你想要的数据:

{ "results" => [
    { "name"      => "Joe Donnelly",
      "district"  => "2",
      "office     => "1218 Longworth",
      "phone"     => "(202) 225-3915",
      "link"      => "http://donnelly.house.gov/",
      "state"     => "IN"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这应该让人们更清楚这里的内容是什么.