/ / Как да получа достъп до тези JSON API данни в Ruby? - Йсън, рубин

Как да получа достъп до тези JSON API данни в Ruby? - Йсън, рубин

Пиша кратка програма за рубин, която вървида вземете пощенски код и да върнете имената на градовете на 2 мили от този пощенски код. Успешно призовах приложния програмен интерфейс (API) и успях да анализирам данните от JSON, но не съм сигурен как да вляза в "градския" ключ.

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

uri = URI(url)

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

Ето как изглежда моята JSON.

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

Опитвах се да вляза в "град" по следния начин:

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

Това изглежда неправилно. Също така опитах

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

И няколко други пермутации от същия код.

Как мога да получа стойността "Northfield" извън данните JSON?

Отговори:

5 за отговор № 1

Ти си почти там, просто използвай results вместо result относно резултата от JSON.parse(response) вместо на response:

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

2 за отговор № 2

JSON parse ще създаде хеш, след което можете да насочите резултатите, които са масив от хешове, както е така:

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

Или, ако се интересувате само от резултатите:

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

За да получите само една точка от данните, можете да изберете един елемент в масива и след това клавиша на стойността, която искате:

array[0]["city"]

За всички градове

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

0 за отговор № 3

Вместо това имате грешка в печата response["result"] можете да го използвате като response[:results].

И ако искате да получите стойността на city ключ от всички хеш, тогава response["result"][0]["city"] няма да работи.

След отговора на анализа ще получите масив от хешове, т.е.

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

И ако искате да извлечете стойностите на ключа city от всички хеш тогава можете да опитате тези стъпки

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

което ще даде резултат

["Atlantic", "Atlantic"]