извлечь значение из ответа JSON googlemaps - PullRequest
0 голосов
/ 16 декабря 2018

enter image description here Мой JSON_Respon от googlemap API дает

%{ body: body} = HTTPoison.get! url


body = {
   "geocoded_waypoints" : [{ ... },{ ... }],
   "routes" : [{
         "bounds" : { ...},
         "copyrights" : "Map data ©2018 Google",
         "legs" : [
        {
               "distance" : {
                  "text" : "189 km",
                  "value" : 188507
               },
               "duration" : {
                  "text" : "2 hours 14 mins",
                  "value" : 8044
               },
               "end_address" : "Juhan Liivi 2, 50409 Tartu, Estonia",
               "end_location" : {
                  "lat" : 58.3785389,
                  "lng" : 26.7146963
               },
               "start_address" : "J. Sütiste tee 44, 13420 Tallinn, Estonia",
               "start_location" : {
                  "lat" : 59.39577569999999,
                  "lng" : 24.6861104
               },
               "steps" : [
                  { ... },
                  { ... },
                  { ... },
                  { ... },
                  {
                     "distance" : {
                        "text" : "0.9 km",
                        "value" : 867
                     },
                     "duration" : {
                        "text" : "2 mins",
                        "value" : 104
                     },
                     "end_location" : {
                        "lat" : 59.4019886,
                        "lng" : 24.7108114
                     },
                     "html_instructions" : "XXXX",
                     "maneuver" : "turn-left",
                     "polyline" : {
                        "points" : "XXXX"
                     },
                     "start_location" : {
                        "lat" : 59.3943677,
                        "lng" : 24.708647
                     },
                     "travel_mode" : "DRIVING"
                  },
                  { ... },
                  { ... },
                  { ... },
                  { ... },
                  { ... },
                  { ... },
                  { ... },
                  { ... },
                  { ... }
               ],
               "traffic_speed_entry" : [],
               "via_waypoint" : []
            }
         ],
         "overview_polyline" : { ... },
         "summary" : "Tallinn–Tartu–Võru–Luhamaa/Route 2",
         "warnings" : [],
         "waypoint_order" : []
      }
   ],
   "status" : "OK"
}

(проверьте прикрепленное изображение) красным, что я получаю с помощью команды ниже Regex.named_captures module

%{"duration_text" => duration_text, "duration_value" => duration_value} = Regex.named_captures ~r/duration\D+(?<duration_text>\d+ mins)\D+(?<duration_value>\d+)/, body

in bleu (проверьте прикрепленное изображение), то, что я хочу извлечь из тела, - это JSON-ответ моего googleAPI-URL в браузере

Не могли бы вы?Пожалуйста, помогите и предоставьте регулярное выражение?

Поскольку http://www.elixre.uk/ не работает, я не могу найти API, помогающий сделать это

Заранее спасибо

1 Ответ

0 голосов
/ 16 декабря 2018

Не используйте регулярные выражения в строке json.Вместо этого преобразуйте строку json в карту эликсира, используя Jason , Poison и т. Д., А затем используйте ключи на карте для поиска интересующих вас данных.

Вот пример:

json_map = Jason.decode!(get_json())

[first_route | _rest] = json_map["routes"]
[first_leg |  _rest] = first_route["legs"]
distance = first_leg["distance"]

=> %{"text" => "189 km", "value" => 188507}

Аналогично, вы можете получить другие части с помощью:

duration = first_leg["duration"]
end_address = first_leg["end_address"]
...
...
...