#ruby #json
#ruby #json
Вопрос:
Я использую ruby для получения некоторой адресной информации из API геокода Google. Я получаю возвращенный JSON и анализирую его в переменную, которая представляет собой массив, содержащий хэши.
После того, как я проанализировал json, он выглядит следующим образом
{"status"=>"OK",
"results"=>
[{"address_components"=>
[{"long_name"=>"XXX", "types"=>["street_number"], "short_name"=>"XXX"},
{"long_name"=>"St Georges Terrace",
"types"=>["route"],
"short_name"=>"St Georges Terrace"},
{"long_name"=>"Perth",
"types"=>["locality", "political"],
"short_name"=>"Perth"},
{"long_name"=>"Western Australia",
"types"=>["administrative_area_level_1", "political"],
"short_name"=>"WA"},
{"long_name"=>"Australia",
"types"=>["country", "political"],
"short_name"=>"AU"},
{"long_name"=>"6000", "types"=>["postal_code"], "short_name"=>"6000"}],
"types"=>["street_address"],
"geometry"=>
{"location_type"=>"ROOFTOP",
"viewport"=>
{"northeast"=>{"lng"=>115.86768092068, "lat"=>-31.9540383793198},
"southwest"=>{"lng"=>115.86138567932, "lat"=>-31.9603336206802}},
"location"=>{"lng"=>115.8645333, "lat"=>-31.957186}},
"formatted_address"=>"XXX St Georges Terrace, Perth WA 6000, Australia"}]}
Мой ruby выглядит следующим образом
require 'rubygems'
require 'json'
require 'open-uri'
require 'pp'
@url = "http://maps.googleapis.com/maps/api/geocode/json?address=PERTH XXX St Georges Terrace, Western Australiaamp;sensor=false"
uri = URI.parse(@url)
json = uri.open.read
parsed_json = JSON.parse(json)
pp parsed_json
Смесь хэшей и массивов сбивает меня с толку в Ruby. Я хочу извлечь информацию в один хэш, чтобы она выглядела примерно так
результат = { «address_line_one» => «XXX St Georges Terrace», «address_line_two» => «Перт», «штат» => «Западная Австрия», «почтовый код» => «6000»}
Спасибо
Ответ №1:
j = parsed_json
a = j['results'][0]['address_components'].map { |e| e['long_name'] }
p(
{ 'address_line_one' => a[0..1].join(' '),
'address_line_two' => a[2],
'state' => a[3],
'postal_code' => a[5] }
)