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 adalahMap
. -
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 sebuahList
yang juga berisi beberapaMap
. -
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 objekUser
dariMap
. -
toJson: Mengonversi objek
User
menjadiMap
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.