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.
Vous devez vous connecter pour publier un commentaire.
L'exception:
dit que
@current
estArray
, pasHash
, et depuis l'index d'un tableau peut être le seul numéro, vous obtenez l'exception. Vous pouvez le voir par l'impression de la inspecté valeur avec:Donc la solution est d'utiliser
[0]
, ou#first
méthode, lors de l'affectation: