Захват определенных значений из JSON

Вот что я пытаюсь сделать. Я создаю просто Ruby файл, который будет как пользователь для ввода, город, а затем вернуть результаты погоды для этого города. Я никогда не писал в Ruby и никогда не использовал API. Но вот моя попытка.

Ответ API ниже:

> {"coord"=>{"lon"=>-85.68, "lat"=>40.11}, "weather"=>[{"id"=>501,
> "main"=>"Rain", "description"=>"moderate rain", "icon"=>"10d"}],
> "base"=>"stations", "main"=>{"temp"=>57.78, "pressure"=>1009,
> "humidity"=>100, "temp_min"=>57, "temp_max"=>60.01},
> "wind"=>{"speed"=>5.17, "deg"=>116.005}, "rain"=>{"1h"=>1.02},
> "clouds"=>{"all"=>92}, "dt"=>1475075671, "sys"=>{"type"=>3,
> "id"=>187822, "message"=>0.1645, "country"=>"US",
> "sunrise"=>1475062634, "sunset"=>1475105280}, "id"=>4917592,
> "name"=>"Anderson", "cod"=>200} [Finished in 2.0s]

Файл Ruby ниже:

require 'net/http'
require 'json'

url = 'http://api.openweathermap.org/data/2.5/weather?q=anderson&APPID=5c89010425b4d730b7558f57234ea3c8&units=imperial'
uri = URI(url)
response = Net::HTTP.get(uri)
parsed = JSON.parse(response)
puts parsed #Print this so I can see results
inputs temp = JSON.parse(response)['main']['temp']
puts desc = JSON.parse(response)['weather']['description']
puts humid = JSON.parse(response)['main']['humidity']
puts wind = JSON.parse(response)['wind']['speed']

То,что я пытался сделать, было только вытащить несколько пунктов, таких как температура, описание, влажность и ветер. Но я, кажется, не могу сделать это правильно. Я продолжаю получать неопределенные ошибки с каждой попыткой.
(Желая завершить это без использования драгоценных камней или ничего, что еще не встроено в Ruby) (я еще не написал части для пользовательского ввода)

1 ответ

  1. Ваша проблема заключается в том, что ответ[‘weather’] является массивом, поэтому вы не сможете получить доступ к [‘weather’][‘description’], вместо этого вам придется сделать что-то вроде [‘weather’][0][‘description’].

    2.3.0 :020 > puts parsed['weather'][0]['description']
    moderate rain
    2.3.0 :021 > puts parsed['main']['humidity']
    100
    2.3.0 :022 > puts parsed['wind']['speed']
    5.17
    2.3.0 :025 > puts parsed['main']['temp']
    58.8