Извлечение значений из хеша - PullRequest
2 голосов
/ 22 марта 2012

Здравствуйте, я использую 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 только в том случае, если я укажу, какой из них .. как, например, помещает файл ['manifest'] ['files'] ['1'] [' url '] <- это работает на irb, но так как мне нужно получить ВСЕ url, именно поэтому я использую .each, но это дает мне невозможное преобразование в строковую ошибку или подобное </p>

#!/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 сделать:

помещает элемент ['manifest'] ['files'] [2] ['url'] <- и это даст мне URL, но с.each будет просто жаловаться на то, что не может преобразовать в строку или подобное </p>

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Попробуйте следующее:

#!/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. Тогда вы получите хеш, который вы можете перебрать правильно.

2 голосов
/ 22 марта 2012

Попробуйте:

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