Reputation: 59
I have a JSON data from REST API. How can we extract the lat lng ? I want it to store in array to use in Polylines.
Example JSON:
{"routes":[{"legs":[{"summary":"","weight":825.2,"duration":596.9,"steps":[],"distance":2394},{"summary":"","weight":756.9,"duration":560.6,"steps":[],"distance":2948.2}],"weight_name":"routability","weight":1582.1,"duration":1157.5,"distance":5342.2}],"waypoints":[{"hint":"UeT4id7k-IkeAAAAdQEAAAAAAAAAAAAASjFaQU1xpUEAAAAAAAAAAB4AAAB1AQAAAAAAAAAAAADupQAA_kvMAKlYIQM8TMwArVghAwAA7wouNmBn","distance":4.231665624816857,"name":"Friedrichstraße","location":[13.388798,52.517033]},{"hint":"Z_ghgJOrBIoNAAAADAAAAAAAAAAJAQAAW7-PQOKcyEAAAAAApq6DQg0AAAAMAAAAAAAAAJEAAADupQAAf27MABiJIQOCbswA_4ghAwAAXwUuNmBn","distance":2.7893928415656375,"name":"Torstraße","location":[13.397631,52.529432]},{"hint":"5fchgP___38jAAAAyAAAACsAAABKAAAAsowKQkpQX0Lx6yZCvsQGQiMAAABkAAAAKwAAACUAAADupQAASufMAOdwIQNL58wA03AhAwMAvxAuNmBn","distance":2.2265954222656257,"name":"Platz der Vereinten Nationen","location":[13.428554,52.523239]}],"code":"Ok"}
Upvotes: 0
Views: 1558
Reputation: 7686
Here's a full example of how to parse your JSON and extract your lat
and long
:
import 'dart:convert';
import 'package:flutter/material.dart';
void main() => runApp(Home());
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Example',
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final json = '{"routes":[{"legs":[{"summary":"","weight":825.2,"duration":596.9,"steps":[],"distance":2394},{"summary":"","weight":756.9,"duration":560.6,"steps":[],"distance":2948.2}],"weight_name":"routability","weight":1582.1,"duration":1157.5,"distance":5342.2}],"waypoints":[{"hint":"UeT4id7k-IkeAAAAdQEAAAAAAAAAAAAASjFaQU1xpUEAAAAAAAAAAB4AAAB1AQAAAAAAAAAAAADupQAA_kvMAKlYIQM8TMwArVghAwAA7wouNmBn","distance":4.231665624816857,"name":"Friedrichstraße","location":[13.388798,52.517033]},{"hint":"Z_ghgJOrBIoNAAAADAAAAAAAAAAJAQAAW7-PQOKcyEAAAAAApq6DQg0AAAAMAAAAAAAAAJEAAADupQAAf27MABiJIQOCbswA_4ghAwAAXwUuNmBn","distance":2.7893928415656375,"name":"Torstraße","location":[13.397631,52.529432]},{"hint":"5fchgP___38jAAAAyAAAACsAAABKAAAAsowKQkpQX0Lx6yZCvsQGQiMAAABkAAAAKwAAACUAAADupQAASufMAOdwIQNL58wA03AhAwMAvxAuNmBn","distance":2.2265954222656257,"name":"Platz der Vereinten Nationen","location":[13.428554,52.523239]}],"code":"Ok"}';
List<LatLong> _getListOfLatLong() {
List<LatLong> list = [];
final parse = jsonDecode(json);
final wayPorts = parse['waypoints'] as List;
wayPorts.forEach((element) {
var waypoint = element as Map<String, dynamic>;
list.add(LatLong(waypoint['location'][0], waypoint['location'][1]));
});
return list;
}
@override
void initState() {
super.initState();
_getListOfLatLong().forEach((element) {
print('LAT: ${element.lat} LONG: ${element.long}');
});
}
@override
Widget build(BuildContext context) {
return Container(
);
}
}
class LatLong {
double lat;
double long;
LatLong(this.lat, this.long);
}
The output I'm getting out of it is the following:
Performing hot restart...
Syncing files to device iPhone 11 Pro Max...
Restarted application in 1,122ms.
flutter: LAT: 13.388798 LONG: 52.517033
flutter: LAT: 13.397631 LONG: 52.529432
flutter: LAT: 13.428554 LONG: 52.523239
Upvotes: 1