这是哈希值:
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
答案 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")