你好我使用HTTParty来调用一个远程json文件,我需要提取我要在我的一个测试中使用的URL。 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"
}
on irb我可以获得示例中的所有子哈希:['manifest'] ['files']如果我指定哪一个,我只能获取url ...例如puts file ['manifest'] [ 'files'] ['1'] ['url']< - 这对irb有效但是因为我需要获取所有url这就是为什么我使用.each但是它让我无法转换为字符串错误或类似
#!/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']&lt; - 这会给我一个url但是.each会抱怨转换为字符串或类似的< / p>
答案 0 :(得分:3)
尝试以下方法:
#!/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。然后你会得到一个可以正确迭代的哈希值。
答案 1 :(得分:2)
尝试:
file['manifest']['files'].each do |item|
puts item['url']
end