微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-从哈希中提取值

您好,我使用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"
    }

在irb上,我可以获取示例中的所有子散列:[‘manifest’] [‘files’],并且仅当我指定哪个网址时,我才能获取url.例如,例如,将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’]<-放进去-这会给我url,但是.each只会抱怨无法转换为字符串或类似内容

解决方法:

请尝试以下操作:

#!/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

格式:json的附加内容告诉HTTParty将响应解析为JSON.然后,您将获得一个哈希,可以正确地对其进行迭代.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐