2

こんにちは、HTTParty を使用して、テストの 1 つで使用する URL を抽出する必要があるリモート json ファイルを呼び出します。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'] 内のすべてのサブ ハッシュを取得できます。 ]['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 で次のことを実行できます。

puts item['manifest']['files'][2]['url'] <--これでURLが得られますが、.eachを使用すると、文字列などに変換できないという苦情が表示されます

4

2 に答える 2

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 :jsonHTTParty は応答を JSON として解析するようになります。次に、適切に反復できるハッシュを取得します。

于 2012-03-22T00:57:14.727 に答える
2

試す:

file['manifest']['files'].each do |item|
   puts item['url']
end
于 2012-03-21T23:49:22.037 に答える