从哈希中提取值

您好使用HTTParty来调用一个远程JSON文件,我需要提取的URL在我的一个testing中使用.. JSON格式是这样的:

"manifest" : { "header" : { "generated" : "xxxxxxxxxxxxxxx", "name" : "xxxxxxxxxxx", "version" : "1.0.0" }, "files" : [ { "file" : "blimp.zip", "url" : "http://www.xxx.xx/restaurants_blimp.zip", "checksum" : "ee98c9455b8d7ba6556f53256f95" }, { "file" : "yard.zip", "url" : "www.xxx.xx/yard.zip", "checksum" : "e66aa3d123f804f34afc622b5" } 

在irb我可以得到所有的子哈希里面的例子:['清单'] ['文件'],我只能得到的url,如果我expecify哪一个..例如把文件['清单'] ['文件' ] ['1'] ['url'] < – 这对irb工作,但因为我需要得到所有url这就是为什么我使用.each但它使我不能转换为string错误或类似

 #!/usr/bin/env ruby require 'httparty' HOST=ARGV[0] ID=ARGV[1] VERSION=ARGV[2] class MyApi include HTTParty end file = MyApi.get("http://#{HOST}/v1/dc/manifest/#{ID}/#{VERSION}") file.each do |item| puts item['manifest']['files']['url'] end 

不工作,但我可以在IRB做一个:

把item ['manifest'] ['files'] [2] ['url'] < – 这会给我的url,但与.each只是抱怨不能转换为string或类似

尝试以下操作:

 #!/usr/bin/env ruby require 'httparty' (HOST, ID, VERSION) = ARGV class MyApi include HTTParty format :json end response = MyApi.get("http://#{HOST}/v1/dc/manifest/#{ID}/#{VERSION}") puts response.inspect 

format :json告诉HTTParty将响应解析为JSON。 然后你会得到一个散列,你可以正确地迭代。

尝试:

 file['manifest']['files'].each do |item| puts item['url'] end