/ / Wie greife ich in Ruby auf diese JSON-API-Daten zu? - Json, Rubin

Wie kann ich auf diese JSON-API-Daten in Ruby zugreifen? - Json, Rubin

Ich schreibe gerade ein kurzes Ruby-Programmum eine Postleitzahl zu nehmen und die Namen der Städte innerhalb von 2 Meilen von dieser Postleitzahl zurückzugeben. Ich habe erfolgreich eine API aufgerufen und konnte die JSON-Daten analysieren, bin mir jedoch nicht sicher, wie ich auf den Schlüssel "city" zugreifen soll.

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

uri = URI(url)

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

So sieht mein JSON aus.

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

Ich habe versucht, wie folgt auf "Stadt" zuzugreifen:

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

Dies scheint falsch zu sein. Auch ausprobiert

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

Und ein paar andere Permutationen desselben Codes.

Wie kann ich den Wert "Northfield" aus den JSON-Daten erhalten?

Antworten:

5 für die Antwort № 1

Sie sind fast da, benutzen Sie einfach results Anstatt von result auf das Ergebnis von JSON.parse(response) statt auf response:

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

2 für die Antwort № 2

Die JSON-Analyse erstellt einen Hash, dann können Sie die Ergebnisse als Array von Hashes ausgeben, wie folgt:

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

Oder wenn Ihnen nur die Ergebnisse wichtig sind:

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

Um nur einen einzelnen Datenpunkt aus den Daten zu erhalten, können Sie ein Element im Array und dann den Schlüssel des gewünschten Werts auswählen:

array[0]["city"]

Für alle Städte

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

0 für die Antwort № 3

Sie haben einen Tippfehler statt response["result"] du kannst es gerne benutzen response[:results].

Und wenn Sie den Wert von erhalten möchten city Schlüssel aus dem ganzen Hash, dann response["result"][0]["city"] wird nicht funktionieren.

Nach der Analyse der Antwort erhalten Sie eine Reihe von Hashes, d.h.

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

Und wenn Sie die Werte von Schlüssel abrufen möchten city von all dem hash kannst du dann diese schritte probieren

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

das wird das Ergebnis geben

["Atlantic", "Atlantic"]