Menu
CoddyTech

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.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

challenge icon

Tantangan

Mudah

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

  1. Definisikan class ComplexNumber dengan atribut real dan imag.
  2. Buat subclass khusus JSONEncoder yang menangani object ComplexNumber.
  3. Implementasikan fungsi yang menerima list berisi object ComplexNumber dan 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