2 votes

Comment puis-je accéder à ces données API JSON en Ruby ?

Je suis en train d'écrire un petit programme Ruby qui va prendre un code postal et retourner les noms des villes dans un rayon de 3 km de ce code postal. J'ai appelé avec succès une API et j'ai pu analyser les données JSON, mais je ne sais pas comment accéder à la clé "ville".

url = API call (not going to replicate here since it requires a key)

uri = URI(url)

response = Net::HTTP.get(uri)
JSON.parse(response)

Voici à quoi ressemble mon JSON.

{
  "results": [
    {
      "zip": "08225",
      "city": "Northfield",
      "county": "Atlantic",
      "state": "NJ",
      "distance": "0.0"
    },
    {
      "zip": "08221",
      "city": "Linwood",
      "county": "Atlantic",
      "state": "NJ",
      "distance": "1.8"
    }
  ]
}

J'ai essayé d'accéder à "city" comme ça :

response['result'][0]['city']

Il semble que ce soit incorrect. J'ai également essayé

response[0][0]['city'] 

Et quelques autres permutations du même code.

Comment puis-je obtenir la valeur 'Northfield' à partir des données JSON ?

5voto

Gerry Points 8271

Vous y êtes presque, utilisez simplement results au lieu de result sur le résultat de JSON.parse(response) plutôt que sur response :

JSON.parse(response)["results"][0]["city"]
#=> "Northfield"

2voto

lacostenycoder Points 401

JSON parse va créer un hash puis vous pouvez cibler les résultats qui sont un tableau de hashs, comme ceci :

hash = JSON.parse(response)
hash['results'].select{|h| h['city'] == 'Northfield'}

Ou si vous ne vous souciez que des résultats :

array = JSON.parse(response)['results']
array.select{|a| a['city' == 'Northfield'} #

Pour obtenir un seul point de données, vous pouvez sélectionner un élément du tableau, puis la clé de la valeur que vous souhaitez :

array[0]['city']

Pour toutes les villes

cities = array.map{|k,v| k['city']}

0voto

rohit Points 255

Vous avez une erreur de frappe, au lieu de response['result'] vous pouvez l'utiliser comme response[:results] .

Et si vous voulez obtenir la valeur de city de tous les hashs, alors response['result'][0]['city'] ne fonctionnera pas.

Après l'analyse de la réponse, vous obtiendrez un tableau de hachages, c'est-à-dire

[{:zip=>"08225", :city=>"Northfield", :county=>"Atlantic", :state=>"NJ", :distance=>"0.0"}, {:zip=>"08221", :city=>"Linwood", :county=>"Atlantic", :state=>"NJ", :distance=>"1.8"}]

Et si vous voulez récupérer les valeurs de la clé city de tous les hashs alors vous pouvez essayer les étapes suivantes

response[:results].map{|x| x[:city]}

ce qui donnera le résultat

["Atlantic", "Atlantic"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X