/ / Comment accéder aux données de cette API JSON dans Ruby? - json, rubis

Comment accéder à ces données API JSON dans Ruby? - json, rubis

J'écris un court programme Ruby qui se passeprendre un code postal et renvoyer les noms des villes situées à moins de 3 km de ce code postal. J'ai réussi à appeler une API et à 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 à" ville "comme ceci:

response["result"][0]["city"]

Cela semble être incorrect. Aussi essayé

response[0][0]["city"]

Et quelques autres permutations du même code.

Comment puis-je extraire la valeur "Northfield" des données JSON?

Réponses:

5 pour la réponse № 1

Vous êtes presque là, utilisez simplement results au lieu de result sur le résultat de JSON.parse(response) au lieu de response:

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

2 pour la réponse № 2

L'analyse JSON créera un hachage, vous pourrez alors cibler les résultats sous forme de tableau de hachages, comme suit:

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 à partir des données, vous pouvez sélectionner un élément dans le tableau, puis la clé de la valeur souhaitée:

array[0]["city"]

Pour toutes les villes

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

0 pour la réponse № 3

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

Et si vous voulez obtenir la valeur de city clé de tout le hash, puis response["result"][0]["city"] ne fonctionnera pas.

Après avoir analysé la réponse, vous obtiendrez un tableau de hachages, c.-à-d.

[{: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 tout le hash, alors vous pouvez essayer cette procédure

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

qui donnera le résultat

["Atlantic", "Atlantic"]