Пиша кратка програма за рубин, която вървида вземете пощенски код и да върнете имената на градовете на 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"]