unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
JSON

JSON #

JSON (JavaScript Object Notation) adalah format data yang ringan, sering digunakan untuk pertukaran data antara server dan aplikasi web atau antar berbagai komponen dalam aplikasi. JSON berbentuk teks yang mudah dibaca oleh manusia dan diurai oleh mesin, menjadikannya pilihan populer untuk menyimpan dan mentransfer data.

Dalam bahasa Dart, JSON dapat dengan mudah dikelola menggunakan pustaka bawaan dart:convert. Berikut adalah penjelasan lengkap dan mendetail mengenai cara kerja JSON dalam Dart.

Pustaka dart:convert #

Untuk bekerja dengan JSON di Dart, Anda menggunakan pustaka dart:convert. Pustaka ini menyediakan fungsi untuk mengubah (encode) objek Dart ke dalam format JSON dan untuk menguraikan (decode) data JSON kembali ke objek Dart.

import 'dart:convert';

Mengubah Objek Dart ke JSON (Encoding) #

Ketika Anda ingin mengirim data dari aplikasi Dart ke server atau menyimpannya dalam file, Anda perlu mengubah objek Dart menjadi string JSON.

Contoh: Encoding Map ke JSON

import 'dart:convert';

void main() {
  var user = {
    'name': 'John Doe',
    'email': '[email protected]',
    'age': 30,
    'isAdmin': true
  };

  var jsonString = jsonEncode(user);
  print('JSON String: $jsonString');
}

Penjelasan:

  • jsonEncode: Fungsi ini mengubah objek Dart (dalam hal ini sebuah Map) menjadi string JSON.
  • Output: {"name":"John Doe","email":"[email protected]","age":30,"isAdmin":true}

Menguraikan JSON ke Objek Dart (Decoding) #

Sebaliknya, ketika Anda menerima data JSON dari server atau dari file, Anda perlu menguraikannya kembali menjadi objek Dart.

Contoh: Decoding JSON ke Map

import 'dart:convert';

void main() {
  var jsonString = '{"name":"John Doe","email":"[email protected]","age":30,"isAdmin":true}';

  var user = jsonDecode(jsonString);
  print('Name: ${user['name']}');
  print('Email: ${user['email']}');
}

Penjelasan:

  • jsonDecode: Fungsi ini mengubah string JSON menjadi objek Dart. Dalam contoh ini, JSON string diubah menjadi Map.

  • Output:

    Name: John Doe
    Email: [email protected]
    

Mengelola Daftar (List) dalam JSON #

JSON sering kali digunakan untuk mewakili daftar data. Dart secara otomatis akan mengurai JSON array menjadi List.

Contoh: Decoding JSON List ke List Dart

import 'dart:convert';

void main() {
  var jsonString = '''
  [
    {"name": "John Doe", "email": "[email protected]"},
    {"name": "Jane Smith", "email": "[email protected]"}
  ]
  ''';

  var userList = jsonDecode(jsonString);
  for (var user in userList) {
    print('Name: ${user['name']}, Email: ${user['email']}');
  }
}

Penjelasan:

  • jsonDecode: Mengubah string JSON menjadi List objek Dart, dimana setiap elemen dalam list adalah Map.

  • Output:

    Name: John Doe, Email: [email protected]
    Name: Jane Smith, Email: [email protected]
    

Mengelola Objek Kompleks #

Jika objek Dart Anda lebih kompleks, seperti objek yang bersarang atau memiliki daftar di dalamnya, Dart dapat dengan mudah menangani ini selama struktur data yang digunakan adalah Map atau List.

Contoh: Objek Kompleks

import 'dart:convert';

void main() {
  var company = {
    'name': 'Example Corp',
    'employees': [
      {'name': 'John Doe', 'email': '[email protected]'},
      {'name': 'Jane Smith', 'email': '[email protected]'}
    ]
  };

  var jsonString = jsonEncode(company);
  print('JSON String: $jsonString');

  var decodedCompany = jsonDecode(jsonString);
  print('Company Name: ${decodedCompany['name']}');
  print('Employees:');
  for (var employee in decodedCompany['employees']) {
    print('Name: ${employee['name']}, Email: ${employee['email']}');
  }
}

Penjelasan:

  • Struktur Kompleks: Di sini, Map yang di-encode mengandung sebuah List yang juga berisi beberapa Map.

  • Output:

    JSON String: {"name":"Example Corp","employees":[{"name":"John Doe","email":"[email protected]"},{"name":"Jane Smith","email":"[email protected]"}]}
    Company Name: Example Corp
    Employees:
    Name: John Doe, Email: [email protected]
    Name: Jane Smith, Email: [email protected]
    

Konversi Objek Kustom (Custom Class) #

Dalam banyak kasus, Anda mungkin ingin mengonversi objek dari atau ke JSON menggunakan kelas kustom Dart. Untuk ini, Anda perlu menerapkan metode fromJson dan toJson di kelas Anda.

Contoh: Konversi Kelas Kustom

import 'dart:convert';

class User {
  String name;
  String email;

  User({required this.name, required this.email});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      email: json['email'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'email': email,
    };
  }
}

void main() {
  var user = User(name: 'John Doe', email: '[email protected]');

  var jsonString = jsonEncode(user.toJson());
  print('JSON String: $jsonString');

  var decodedUser = User.fromJson(jsonDecode(jsonString));
  print('Name: ${decodedUser.name}, Email: ${decodedUser.email}');
}

Penjelasan:

  • fromJson: Konstruktor pabrik (factory constructor) yang digunakan untuk membuat objek User dari Map.

  • toJson: Mengonversi objek User menjadi Map yang dapat diubah menjadi JSON.

  • Output:

    JSON String: {"name":"John Doe","email":"[email protected]"}
    Name: John Doe, Email: [email protected]
    

Menangani Kesalahan (Error Handling) #

Saat mengonversi JSON, kesalahan bisa terjadi, misalnya ketika struktur data JSON tidak sesuai dengan ekspektasi atau JSON yang diterima tidak valid.

Contoh: Menangani Kesalahan Parsing

import 'dart:convert';

void main() {
  var invalidJsonString = '{"name": "John Doe", "email": "[email protected]"'; // Missing closing brace

  try {
    var user = jsonDecode(invalidJsonString);
  } catch (e) {
    print('Terjadi kesalahan saat parsing JSON: $e');
  }
}

Penjelasan:

  • Try-Catch: Menggunakan blok try-catch untuk menangkap kesalahan yang terjadi saat decoding JSON.
  • Output: Menampilkan pesan kesalahan jika terjadi masalah saat parsing JSON.

Kesimpulan #

JSON adalah format data yang sangat umum dan didukung dengan baik di Dart melalui pustaka dart:convert. Anda dapat dengan mudah mengonversi objek Dart ke JSON dan sebaliknya, baik untuk data sederhana seperti Map dan List, maupun untuk objek yang lebih kompleks atau kelas kustom.

Dengan memahami cara kerja JSON di Dart, Anda dapat mengelola data dengan lebih efektif dalam aplikasi Anda, baik untuk kebutuhan komunikasi antara klien-server, penyimpanan data, maupun keperluan lain yang memerlukan format data yang ringan dan mudah diurai.

« Mocking
Yaml »