ruby - json pas de conversion implicite de la Chaîne en Entier (TypeError)

Jouer avec ruby,

J'ai:

#!/usr/bin/ruby -w
# World weather online API url format: http://api.worldweatheronline.com/free/v1/weather.ashx?q={location}&format=json&num_of_days=1&date=today&key={api_key}

require 'net/http'
require 'json'

@api_key = 'xxx'
@location = 'city'
@url = "http://api.worldweatheronline.com/free/v1/weather.ashx?q=#{@location}&format=json&num_of_days=1&date=today&key=#{@api_key}"
@json = Net::HTTP.get(URI.parse(@url))
@parse = JSON.parse(@json)
@current = @parse['data']['current_condition']

puts @current['cloudcover']

Il retourne:

[]': no implicit conversion of String into Integer (TypeError) se référant à la dernière ligne.

La lecture des réponses ici, et je vois le problème, c'est que @actuelle ne contient pas de json valide. Alors, Comment aurais-je mis dans la partie variable de la réponse json?

@actuelle me donne:

{"cloudcover"=>"0", "humidity"=>"49", "observation_time"=>"03:18 PM", "precipMM"=>"0.1", "pressure"=>"1018", "temp_C"=>"20", "temp_F"=>"68", "visibility"=>"10", "weatherCode"=>"116", "weatherDesc"=>[{"value"=>"Partly Cloudy"}], "weatherIconUrl"=>[{"value"=>"http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png"}], "winddir16Point"=>"SE", "winddirDegree"=>"130", "windspeedKmph"=>"11", "windspeedMiles"=>"7"}

met @actuelle.inspecter donne:

[{"cloudcover"=>"0", "humidity"=>"56", "observation_time"=>"03:39 PM", "precipMM"=>"0.1", "pressure"=>"1018", "temp_C"=>"19", "temp_F"=>"66", "visibility"=>"10", "weatherCode"=>"116", "weatherDesc"=>[{"value"=>"Partly Cloudy"}], "weatherIconUrl"=>[{"value"=>"http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png"}], "winddir16Point"=>"ESE", "winddirDegree"=>"120", "windspeedKmph"=>"11", "windspeedMiles"=>"7"}]

Solution:

puts @current[0]['cloudcover']

Mais pourquoi?

  • il semble @current est de tableau, pas de hachage
  • essayez puts @current - ce que vous obtenez?
  • mise à jour de l'OP.
  • J'ai mis à jour l'OP avec [@actuelle]. Des idées?
  • s'il vous plaît montrer de sortie pour @current.class
  • il dit Tableau.
  • c'est prévisible
  • également mettre à jour le post avec puts @current.inspect
  • fait. La Solution est: met @actuelle[0]['cloudcover'] mais je accepter l'explication comme une réponse.

InformationsquelleAutor | 2014-04-16