如何检索所有哈希键

时间:2015-11-21 22:09:48

标签: arrays ruby json hashmap

这是哈希值:

resource = RestClient::Resource.new 'http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=BMI'
puts response_Json = eval(resource.get)

我无法以递归方式获取所有'因为'密钥。

我在Stack Overflow上尝试了很多解决方案,包括已接受的答案并尝试修改它们。

def extract_list(hash, find_By_Key, collect = false)
  if (hash.class == Array) then
          hash.each { |value| puts hash; extract_list(value, find_By_Key) }
  end
  hash.map do |k, v|
      puts k.class
v.is_a?(Hash) ? extract_list(v, find_By_Key, (k == find_By_Key)) :
    (collect ? v : nil)
v.is_a?(Array) ? extract_list(v, find_By_Key, (k == find_By_Key)) :
    (collect ? v : nil)
v.is_a?(Symbol) ?  (collect ? v : nil):
    (puts v)    
  end.compact.flatten
end

1 个答案:

答案 0 :(得分:1)

希望这有帮助!

require 'rest-client'

def extract_list(data, key)
  if data.class == Array
    data.flat_map { |e|
      extract_list(e, key)
    }.compact
  elsif data.class == Hash
    data.flat_map { |k, v|
      if k == key
        v
      else
        extract_list(v, key)
      end
    }.compact
  end
end

resource = RestClient::Resource.new 'http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=BMI'
data = JSON.parse(resource.get)
p extract_list(data, "since")