/ / Como acesso esses dados da API JSON no Ruby? - json, rubi

Como faço para acessar os dados da API JSON no Ruby? - json, rubi

Estou escrevendo um pequeno programa Ruby que vaipara pegar um CEP e retornar os nomes das cidades a menos de 3 km desse CEP. Liguei para uma API com sucesso e consegui analisar os dados JSON, mas não tenho certeza de como acessar a chave "cidade".

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

uri = URI(url)

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

Aqui está a aparência do meu JSON.

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

Eu tenho tentado acessar "cidade" assim:

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

Parece estar incorreto. Também tentei

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

E algumas outras permutações do mesmo código.

Como posso obter o valor "Northfield" dos dados JSON?

Respostas:

5 para resposta № 1

Você está quase lá, basta usar results ao invés de result sobre o resultado de JSON.parse(response) em vez de em response:

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

2 para resposta № 2

A análise JSON criará um hash; então, você pode direcionar os resultados, que são uma matriz de hashes, como:

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

Ou se você se importa apenas com os resultados:

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

Para obter apenas um único ponto de dados, você pode selecionar um item na matriz e, em seguida, a chave do valor que deseja:

array[0]["city"]

Para todas as cidades

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

0 para resposta № 3

Você tem um erro de digitação, em vez de response["result"] você pode usá-lo como response[:results].

E se você deseja obter o valor de city chave de todo o hash, então response["result"][0]["city"] não funciona.

Após analisar a resposta, você obterá uma variedade de hashes, ou seja,

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

E se você deseja buscar os valores da chave city de todo o hash, você pode tentar estas etapas

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

o que dará o resultado

["Atlantic", "Atlantic"]