/ / Jak uzyskać dostęp do tych danych JSON API w Ruby? - json, rubin

Jak uzyskać dostęp do danych interfejsu API JSON w Ruby? - json, rubin

Piszę krótki program Rubywziąć kod pocztowy i zwrócić nazwy miast w promieniu 2 mil od tego kodu. Z powodzeniem zadzwoniłem do interfejsu API i byłem w stanie przeanalizować dane JSON, ale nie jestem pewien, jak uzyskać dostęp do klucza „miasto”.

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

uri = URI(url)

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

Oto jak wygląda mój JSON.

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

Próbowałem uzyskać dostęp do „miasta” w następujący sposób:

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

To wydaje się niepoprawne. Próbowałem też

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

I kilka innych kombinacji tego samego kodu.

Jak mogę uzyskać wartość „Northfield” z danych JSON?

Odpowiedzi:

5 dla odpowiedzi № 1

Jesteś prawie na miejscu, po prostu użyj results zamiast result na wynik JSON.parse(response) zamiast na response:

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

2 dla odpowiedzi nr 2

Parsowanie JSON utworzy skrót, a następnie możesz kierować na wyniki, które są tablicą skrótów, na przykład:

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

Lub jeśli zależy Ci tylko na wynikach:

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

Aby uzyskać z danych tylko jeden punkt danych, możesz wybrać jeden element w tablicy, a następnie klucz wartości, którą chcesz:

array[0]["city"]

Dla wszystkich miast

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

0 dla odpowiedzi № 3

Wystąpił błąd literówki zamiast response["result"] możesz go używać jak response[:results].

A jeśli chcesz uzyskać wartość city klucz z całego skrótu response["result"][0]["city"] nie będzie działać.

Po przeanalizowaniu odpowiedzi otrzymasz tablicę skrótów, tj

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

A jeśli chcesz pobrać wartości klucza city z całego skrótu możesz wypróbować te kroki

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

co da wynik

["Atlantic", "Atlantic"]