Pengodean JSON kustom
Pelajaran 6 dari 9 dalam kursus JSON Python di Coddy.
Encoding JSON kustom adalah fitur canggih dalam module json Python yang memungkinkan kamu melakukan serialisasi object Python kompleks yang tidak didukung secara bawaan oleh JSON. Fitur ini sangat berguna saat kamu bekerja dengan class atau object kustom yang tidak memiliki representasi JSON langsung.
Class JSONEncoder
Untuk membuat encoder JSON kustom, kamu perlu membuat subclass dari class json.JSONEncoder dan mengganti method default()-nya:
import json
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, YourCustomClass):
return obj.to_dict() # Ubah object-mu menjadi dictionary
return json.JSONEncoder.default(self, obj)
Menggunakan Encoder Kustom
Setelah menentukan encoder kustom, kamu bisa menggunakannya dengan json.dumps() atau json.dump():
json_string = json.dumps(your_object, cls=CustomEncoder)
Contoh: Meng-encode Class Kustom
Mari kita lihat contoh praktis:
import json
from datetime import datetime
class Person:
def __init__(self, name, birthdate):
self.name = name
self.birthdate = birthdate
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Person):
return {"name": obj.name, "birthdate": obj.birthdate.isoformat()}
elif isinstance(obj, datetime):
return obj.isoformat()
return json.JSONEncoder.default(self, obj)
person = Person("Alice", datetime(1990, 5, 15))
json_string = json.dumps(person, cls=CustomEncoder, indent=2)
print(json_string)
Contoh ini menunjukkan cara meng-encode class kustom Person dan menangani object datetime di dalamnya.
Poin Penting
- Method
default()dipanggil untuk object yang tidak dapat diserialisasi secara bawaan. - Selalu sediakan cara untuk kembali menggunakan encoder default untuk tipe yang tidak dikenal.
- Encoder kustom berguna untuk menangani struktur data kompleks, class kustom, dan tipe Python nonstandar.
Dengan menggunakan encoder JSON kustom, kamu dapat mengintegrasikan object Python kompleks ke dalam alur kerja JSON dengan lancar, sehingga serialisasi data menjadi lebih fleksibel dan canggih.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Tantangan
MudahBuat encoder JSON khusus untuk class ComplexNumber. Encoder tersebut harus mengonversi bilangan kompleks menjadi object JSON dengan kunci 'real' dan 'imag' untuk bagian real dan imajiner secara berurutan.
- Definisikan class
ComplexNumberdengan atributrealdanimag. - Buat subclass khusus
JSONEncoderyang menangani objectComplexNumber. - Implementasikan fungsi yang menerima list berisi object
ComplexNumberdan mengembalikan representasi string JSON menggunakan encoder khusus tersebut.
Input berikut akan diberikan:
3.14,2.71
1.41,-1.73
2.0,0
0,-1
Setiap baris mewakili bilangan kompleks dengan bagian real dan imajiner yang dipisahkan oleh koma.
Cetak string JSON yang dihasilkan. Pastikan JSON diformat dengan indentasi 2 spasi.
Coba sendiri
import json
# Baca input
complex_numbers = []
while True:
try:
line = input().strip()
if line:
real, imag = map(float, line.split(','))
complex_numbers.append((real, imag))
except EOFError:
break
class ComplexNumber:
def __init__(self, real, imag):
self.real = real
self.imag = imag
# TODO: Buat subclass JSONEncoder khusus yang menangani object ComplexNumber
# TODO: Buat fungsi yang menerima list berisi object ComplexNumber dan mengembalikan string JSON
# TODO: Ubah data input menjadi object ComplexNumber, lalu gunakan fungsimu untuk membuat string JSON
# Cetak string JSON yang dihasilkan
print(json_string)Semua pelajaran di JSON Python
Latihan sendiri: Compiler Python online