Ruby深度哈希循环?

时间:2014-06-26 17:21:40

标签: ruby loops hash

我在下面的表单中有一个大的嵌套哈希。我需要遍历并提取每个存储库的名称和URL,但我似乎无法做到这一点。有什么建议?

代码段:

repo_json = get_touched_repos()
repo_hash = JSON.parse(repo_json)
puts repo_hash.class
puts repo_hash['repositories'][0]['name']

哈希:

{
  "repositories": [
    {
      "type": "repo",
      "username": "...",
      "name": "....",
      "owner": "...",
      "homepage": "",
      "description": "description",
      "language": "Java",
      "watchers": 2,
      "followers": 2,
      "forks": 1,
      "size": 
      "open_issues": 0,
      "score": 1.0,
      "has_downloads": true,
      "has_issues": true,
      "has_wiki": true,
      "fork": false,
      "private": false,
      "url": "http://my.domain.com/repo/name",
      "created": "2012-07-02T17:47:54Z",
      "created_at": "2012-07-02T17:47:54Z",
      "pushed_at": "2014-03-20T20:09:38Z",
      "pushed": "2014-03-20T20:09:38Z"
    },
    {....}
    ]
 }

2 个答案:

答案 0 :(得分:2)

您可以使用Array#each方法执行此操作

repo_hash['repositories'].each do |repo|
  puts repo['name']
  puts repo['url']
end

答案 1 :(得分:1)

获取哈希中的名称和URL:

name_url_pairs = repo_hash['repositories'].collect do |repo|
  { name: repo['name'], url: repo['url] }
end

更新:返回包含多个提取值的小哈希。

按名称索引的另一种方法:

name_hash = Hash[
  repo_hash['repositories'].collect do |repo|
    [ repo['name'], repo['url'] ]
  end
]