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...

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...

Implementing in-app turn-by-turn navigation in a Flutter application using Google Maps and the Directions API involves several steps

  1. Integrate Google Maps into Your Flutter App a. Add the  google_maps_flutter  Package: Include the  google_maps_flutter  package in your  pubspec.yaml  file to embed Google Maps into your Flutter application. yaml dependencies: google_maps_flutter: latest_version b. Obtain and Configure Your API Key: Generate an API Key:  Create a project in the  Google Cloud Console , enable the  Maps SDK for Android  and  Maps SDK for iOS , and generate an API key. Configure Android:  Add your API key to the  AndroidManifest.xml  file. Configure iOS:  Add your API key in the  AppDelegate.swift  file. c. Display the Map: Use the  GoogleMap  widget to display the map within your application. #dartcode import 'package:google_maps_flutter/google_maps_flutter.dart'; GoogleMap( initialCameraPosition: CameraPosition( target: LatLng(latitude, longitude), zoom: 14.0, ), onMapCreated: (Goo...