Welcome to this post.
In this post, I am going to cover about JSON parsing in Dart.
What I will do on this project?
1. Get data from Rest API.
2. Parse the JSON Data
Let's Start-
First, take look at the data source. I will get the data from this link.
JSON sample.
This response you will find that link
This is the json Sample. I just take only results data. It's a collection of the result. SO create the model class first.
Model Class
We have so many things on the JSON result.
so you have to create all the field.
Note: If you don't need some field, simply skip those.
Note: here films and pilots are Lists, not String.
Now create the constructor-
Now create a factory method-
take a map and return a new RestModel.
See the full class code of RestModel in Github.
Parse JSON
Now time for getting data from the internet-
Create the main function
Save the link in a String.
Create a new list. And the subtype of this list will be RestModel
import HTTP package and make a request
next steps-
1. if the response code is 200 then the response is successful
2. decode the response code with the help of json class that include in the package 'dart:convert'
3. after decode it return a map.
4. take only 'result' from the map and save in a new variable.
5. loop this list and for every entry and return a new RestModel
See the code-
print the list
Output:
Full code-
That's it.
If you have any quires then use the comment section. Feel free to put comments.
you can easily parse json.
Happy Coding.
In this post, I am going to cover about JSON parsing in Dart.
What I will do on this project?
1. Get data from Rest API.
2. Parse the JSON Data
Let's Start-
First, take look at the data source. I will get the data from this link.
https://swapi.co/api/starships/
JSON sample.
This response you will find that link
{
"count": 37,
"next": "https://swapi.co/api/starships/?page=2",
"previous": null,
"results": [
{
"name": "Executor",
"model": "Executor-class star dreadnought",
"manufacturer": "Kuat Drive Yards, Fondor Shipyards",
"cost_in_credits": "1143350000",
"length": "19000",
"max_atmosphering_speed": "n/a",
"crew": "279144",
"passengers": "38000",
"cargo_capacity": "250000000",
"consumables": "6 years",
"hyperdrive_rating": "2.0",
"MGLT": "40",
"starship_class": "Star dreadnought",
"pilots": [],
"films": [
"https://swapi.co/api/films/2/",
"https://swapi.co/api/films/3/"
],
"created": "2014-12-15T12:31:42.547000Z",
"edited": "2017-04-19T10:56:06.685592Z",
"url": "https://swapi.co/api/starships/15/"
},
...
]
}
This is the json Sample. I just take only results data. It's a collection of the result. SO create the model class first.
Model Class
We have so many things on the JSON result.
so you have to create all the field.
Note: If you don't need some field, simply skip those.
final String name; final String model; final String manufacturer; final String cost_in_credits; final String length; final String max_atmosphering_speed; final String crew; final String passengers; final String cargo_capacity; final String consumables; final String hyperdrive_rating; final String MGLT; final String starship_class; final List films; final List pilots; final String created; final String edited; final String url;
Now create the constructor-
RestModel(
{this.name,
this.model,
this.manufacturer,
this.cost_in_credits,
this.length,
this.max_atmosphering_speed,
this.crew,
this.passengers,
this.cargo_capacity,
this.consumables,
this.hyperdrive_rating,
this.MGLT,
this.starship_class,
this.films,
this.pilots,
this.created,
this.edited,
this.url});
Now create a factory method-
take a map and return a new RestModel.
factory RestModel.fromJson(Map<String, dynamic> json) { return new RestModel( name: json["name"] as String, model: json["model"] as String, manufacturer: json["manufacturer"] as String, cost_in_credits: json["cost_in_credits"] as String, max_atmosphering_speed: json["max_atmosphering_speed"] as String, crew: json["crew"] as String, passengers: json["passengers"] as String, cargo_capacity: json["cargo_capacity"] as String, consumables: json["consumables"] as String, hyperdrive_rating: json["hyperdrive_rating"] as String, MGLT: json["MGLT"] as String, starship_class: json["starship_class"] as String, films: json["films"] as List, pilots: json["pilots"] as List, created: json["created"] as String, edited: json["edited"] as String, url: json["url"] as String, ); }
See the full class code of RestModel in Github.
Parse JSON
Now time for getting data from the internet-
Create the main function
void main() async{ }
Save the link in a String.
final link = "https://swapi.co/api/starships/";
Create a new list. And the subtype of this list will be RestModel
List<RestModel> list = new List();
import HTTP package and make a request
var res = await http.get(Uri.encodeFull(link), headers: {"Accept": "application/json"});
next steps-
1. if the response code is 200 then the response is successful
2. decode the response code with the help of json class that include in the package 'dart:convert'
3. after decode it return a map.
4. take only 'result' from the map and save in a new variable.
5. loop this list and for every entry and return a new RestModel
See the code-
if (res.statusCode == 200) { var data = json.decode(res.body); var rest = data["results"] as List; for (var json in rest) { var model = new RestModel.fromJson(json); list.add(model); } }
print the list
print("List Size: ${list.length}");
Output:
List Size: 10
Full code-
import 'package:http/http.dart' as http; import 'dart:convert'; import 'RestModel.dart'; void main() async{ final link = "https://swapi.co/api/starships/"; List<RestModel> list = new List(); var res = await http .get(Uri.encodeFull(link), headers: {"Accept": "application/json"}); if (res.statusCode == 200) { var data = json.decode(res.body); var rest = data["results"] as List; for (var json in rest) { var model = new RestModel.fromJson(json); list.add(model); } print("List Size: ${list.length}"); } }
That's it.
If you have any quires then use the comment section. Feel free to put comments.
you can easily parse json.
Happy Coding.




