Example 1: parse json to dart model
import 'dart:convert';
main() {
String nestedObjText =
'{"title": "Dart Tutorial", "description": "Way to parse Json", "author": {"name": "bezkoder", "age": 30}}';
Tutorial tutorial = Tutorial.fromJson(jsonDecode(nestedObjText));
print(tutorial);
Example 2: json to dart
class Autogenerated {
int postId;
int id;
String name;
String email;
String body;
Autogenerated({this.postId, this.id, this.name, this.email, this.body});
Autogenerated.fromJson(Map<String, dynamic> json) {
postId = json['postId'];
id = json['id'];
name = json['name'];
email = json['email'];
body = json['body'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['postId'] = this.postId;
data['id'] = this.id;
data['name'] = this.name;
data['email'] = this.email;
data['body'] = this.body;
return data;
}
}
Example 3: json to class dart
The Data:
For this example, let's assume that my data looks something like this:
{
"type": "articles",
"id": "1",
"data": [
"val",
"val2"
],
"author": {
"id": "42",
"name": "bo"
}
}
This data object is rather simple but will help us highlight all the important cases that we care about.
Our Classes:
In this example, we have 2 classes that we are working with: Document.dart
class Document {
final String type;
final int id;
final List<String> data;
final Author author;
Document({this.type, this.id, this.data, this.author});
// add fromJson method here
}
and our Author.dart
class Author{
final int id;
final String name;
Author({this.id, this.name});
// add fromJson method here
}
FromJson Methods:
Let’s first start with our Author class as it has no nested class objects in it.
class Author{
final int id;
final String name;
Author({this.id, this.name});
factory Author.fromJson(Map<String, dynamic> json) {
return Author(
id: json["id"],
name: json["name"],
);
}
}
As you can see, it’s a rather simple method when you are dealing with just converting simple variables from JSON into your class objects. To ensure we don’t have any issues with the format in which the data is received from our APIs, you can go a step further and cast the JSON values into your object type like so:
json["name"].toString()
This is not necessary, but sometimes useful if the source of the API is not reliable or a professional service. I’ve seen instances in the past where when a double is equal to 0, the JSON object reads it as an int instead of a double which then throws an error. Casting your value into a variable type is a safe way of handling those rare cases.
Next, let’s take a look at our parent class, Document:
class Document {
final String type;
final int id;
final List<String> data;
final Author author;
Document({this.type, this.id, this.data, this.author});
factory Document.fromJson(Map<String, dynamic> json) {
var dataObj = json['data'];
return Document(
type: json["type"],
id: json["id"],
data: new List<String>.from(dataObj),
author: Author.fromJson(json['author']),
);
}
}
Example 4: convert json to dart
class Todo {
int userId;
int id;
String title;
bool completed;
Todo({this.userId, this.id, this.title, this.completed});
Todo.fromJson(Map<String, dynamic> json) {
userId = json['userId'];
id = json['id'];
title = json['title'];
completed = json['completed'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['userId'] = this.userId;
data['id'] = this.id;
data['title'] = this.title;
data['completed'] = this.completed;
return data;
}
}