Skip to main content

JSON Serialization in Flutter

JSON Serialization in Flutter

JSON Serialization in Flutter

Introduction

JSON serialization in Flutter involves converting Dart objects to JSON strings (serialization) and JSON data back to Dart objects (deserialization). It is a common approach to exchange data between an application and a backend server or local storage.

Serialization and Deserialization

Serialization: Converts a Dart object into a JSON string.
Deserialization: Parses a JSON string into a Dart object.

Example JSON structure:

{
  "id": 1,
  "name": "Flutter",
  "isAwesome": true
}

Steps for JSON Serialization

1. Define a Dart Class

class Course {
  final int id;
  final String name;
  final bool isAwesome;

  Course({required this.id, required this.name, required this.isAwesome});
}

2. Add Serialization and Deserialization Methods

class Course {
  final int id;
  final String name;
  final bool isAwesome;

  Course({required this.id, required this.name, required this.isAwesome});

  factory Course.fromJson(Map json) {
    return Course(
      id: json['id'],
      name: json['name'],
      isAwesome: json['isAwesome'],
    );
  }

  Map toJson() {
    return {
      'id': id,
      'name': name,
      'isAwesome': isAwesome,
    };
  }
}

3. Use the Methods

void main() {
  String jsonString = '{"id": 1, "name": "Flutter", "isAwesome": true}';
  Map jsonData = jsonDecode(jsonString);
  Course course = Course.fromJson(jsonData);

  print(course.name); // Output: Flutter

  String jsonEncoded = jsonEncode(course.toJson());
  print(jsonEncoded); // Output: {"id":1,"name":"Flutter","isAwesome":true}
}

Using json_serializable Package

1. Add Dependencies

dependencies:
  json_annotation: ^latest_version

dev_dependencies:
  build_runner: ^latest_version
  json_serializable: ^latest_version

2. Define the Class

@JsonSerializable()
class Course {
  final int id;
  final String name;
  final bool isAwesome;

  Course({required this.id, required this.name, required this.isAwesome});

  factory Course.fromJson(Map json) => _$CourseFromJson(json);
  Map toJson() => _$CourseToJson(this);
}

3. Generate Code

flutter pub run build_runner build

4. Use the Generated Code

void main() {
  String jsonString = '{"id": 1, "name": "Flutter", "isAwesome": true}';
  Map jsonData = jsonDecode(jsonString);

  Course course = Course.fromJson(jsonData);
  print(course.name); // Output: Flutter

  String jsonEncoded = jsonEncode(course.toJson());
  print(jsonEncoded); // Output: {"id":1,"name":"Flutter","isAwesome":true}
}

Handling Nested JSON

For nested structures, create additional Dart classes and handle them recursively:

Example JSON

{
  "id": 1,
  "name": "Flutter",
  "topics": [
    {"id": 101, "title": "Widgets"},
    {"id": 102, "title": "State Management"}
  ]
}

Dart Classes

class Topic {
  final int id;
  final String title;

  Topic({required this.id, required this.title});

  factory Topic.fromJson(Map json) => Topic(
    id: json['id'],
    title: json['title'],
  );

  Map toJson() => {
    'id': id,
    'title': title,
  };
}

class Course {
  final int id;
  final String name;
  final List topics;

  Course({required this.id, required this.name, required this.topics});

  factory Course.fromJson(Map json) => Course(
    id: json['id'],
    name: json['name'],
    topics: (json['topics'] as List).map((t) => Topic.fromJson(t)).toList(),
  );

  Map toJson() => {
    'id': id,
    'name': name,
    'topics': topics.map((t) => t.toJson()).toList(),
  };
}

Summary

  • Manual serialization is straightforward but repetitive.
  • Use json_serializable for automated serialization.
  • Handle nested JSON with recursive Dart class structures.

Efficient JSON serialization ensures smooth communication between Flutter apps and external data sources.

Comments

Popular posts from this blog

API Integration in Flutter - A Step-by-Step Guide

API Integration in Flutter - A Step-by-Step Guide API Integration in Flutter - A Step-by-Step Guide Learn how to integrate APIs into your Flutter app with this easy-to-follow tutorial. Step 1: Add Dependencies Start by adding the necessary dependencies for HTTP requests and JSON handling in your pubspec.yaml file. dependencies: flutter: sdk: flutter http: ^0.13.3 Run flutter pub get to install the dependencies. Step 2: Create a Service Class for API Calls Next, create a Dart file (e.g., api_service.dart ) to handle your API logic. Below is an example of a simple GET request function: import 'dart:convert'; import 'package:http/http.dart' as http; class ApiService { final String baseUrl; ApiService({required this.baseUrl...

Flutter Interview Preparation Topics

Flutter Interview Preparation Flutter Interview Preparation 1. Core Flutter Concepts **Widgets**: - StatelessWidget vs. StatefulWidget. - InheritedWidget and InheritedModel. - Custom Widgets (Creating reusable components). **State Management**: - Provider, Riverpod, Bloc/Cubit, Redux, or GetX. - Compare and contrast state management approaches. - Handling global and local state. **Navigation and Routing**: - `Navigator 1.0` vs. `Navigator 2.0`. - Named routes and deep linking. - Implementing nested navigation. **Lifecycle**: - App lifecycle (`AppLifecycleState`). - Widget lifecycle (`initState`, `dispose`, etc.). 2. Advanced Flutter Development **Performance Optimization**: - Efficient...

How, Purpose, and When to Use Google ML Kit in Flutter

How, Purpose, and When to Use Google ML Kit in Flutter How, Purpose, and When to Use Google ML Kit in Flutter Purpose of Google ML Kit in Flutter Google ML Kit simplifies adding AI features to mobile applications. Its primary purposes include: On-Device Machine Learning: Perform AI tasks without requiring an internet connection, ensuring low latency, privacy, and faster processing. Pre-trained Models: Use Google's robust, pre-trained models without needing ML expertise. Versatile AI Features: Enable functionalities like: Text recognition Barcode scanning Image labeling Face detection Pose detection Language identification Translation Entity extraction Smart replies When to Use Google ML Kit You should use Google ML Kit when: You need pre-built AI features withou...