Mendekode Menjadi Case Class
Petakan JSON ke tipe Anda.
Mendekode Menjadi Case Class adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Decoder Memetakan JSON ke Tipe
Decoder[A] mengetahui cara membaca nilai Json menjadi tipe Scala A.
Circe menyediakan decoder untuk tipe primitif dan koleksi sejak awal, serta dapat membuat decoder untuk case class Anda sendiri secara otomatis.
Case Class Tujuan
Misalkan API Anda mengembalikan data pengguna. Modelkan bentuknya dengan case class yang nama field-nya cocok dengan kunci JSON.
Kecocokan nama inilah yang memungkinkan Circe menurunkan decoder tanpa perakitan manual.
case class User(name: String, age: Int, admin: Boolean)Derivasi Otomatis
Impor io.circe.generic.auto._, lalu Circe secara implisit menurunkan Decoder[User] sesuai kebutuhan, di mana pun decoder tersebut diperlukan.
Setelah itu, Anda dapat memanggil decode[User] tanpa kode tambahan yang bertele-tele.
import io.circe.generic.auto._
import io.circe.parser.decode
val json = "{\"name\":\"Ada\",\"age\":36,\"admin\":true}"
val user = decode[User](json)
println(user) // Right(User(Ada,36,true))Derivasi Semi-Otomatis
Untuk waktu kompilasi yang lebih baik dan kontrol eksplisit, gunakan io.circe.generic.semiauto.deriveDecoder.
Anda mendefinisikan decoder sekali, biasanya di objek pendamping, lalu menggunakan kembali satu instance tersebut di mana pun.
import io.circe.Decoder
import io.circe.generic.semiauto._
object User {
implicit val dec: Decoder[User] = deriveDecoder[User]
}Kegagalan Decoding
Jika field wajib tidak ada atau memiliki tipe yang salah, decoding gagal dengan DecodingFailure.
Kegagalan tersebut membawa riwayat operasi cursor yang menunjukkan dengan tepat field yang menyebabkan masalah.
val bad = decode[User]("{\"name\":\"Ada\"}")
println(bad)
// Left(DecodingFailure at .age: Missing required field)Field Opsional dalam Class
Jadikan sebuah field bertipe Option[A] jika kunci JSON mungkin tidak ada atau bernilai null.
Circe secara otomatis mendekode kunci yang hilang menjadi None, sehingga Anda tidak memerlukan decoder khusus hanya untuk menangani sifat opsional.
case class Account(id: Long, nickname: Option[String])
val a = decode[Account]("{\"id\":7}")
println(a) // Right(Account(7,None))Nilai Bawaan
Nilai bawaan case class dapat mengisi kunci JSON yang hilang, tetapi hanya jika Anda melakukan derivasi dengan konfigurasi yang mengaktifkan nilai bawaan.
Modul circe-generic-extras menyediakan fitur ini melalui Configuration.default.withDefaults.
import io.circe.generic.extras._
implicit val cfg: Configuration =
Configuration.default.withDefaults
@ConfiguredJsonCodec
case class Settings(theme: String = "dark")Case Class Bertingkat
Decoding dapat dikomposisikan: jika Circe dapat mendekode tipe setiap field, Circe juga dapat mendekode class yang memuat case class lain.
Derivasi dilakukan secara rekursif dan otomatis, sehingga satu impor dapat menangani struktur yang bertingkat dalam.
case class Address(city: String)
case class Person(name: String, address: Address)
val p = decode[Person](
"{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}}")
println(p)Mengganti Nama Field
Jika kunci JSON berbeda dari nama Scala, misalnya menggunakan snake_case, gunakan derivasi terkonfigurasi dengan Configuration.default.withSnakeCaseMemberNames.
Ini memetakan created_at ke field Scala createdAt tanpa decoder yang ditulis manual.
import io.circe.generic.extras._
implicit val cfg: Configuration =
Configuration.default.withSnakeCaseMemberNames
@ConfiguredJsonCodec
case class Event(createdAt: String)Mengumpulkan Kesalahan
Secara bawaan, decoding berhenti pada kesalahan pertama. Sebaliknya, decodeAccumulating mengumpulkan semua kegagalan ke dalam ValidatedNel.
Ini berguna untuk validasi formulir saat Anda ingin melaporkan semua masalah sekaligus.
import io.circe.Decoder
val result = Decoder[User]
.decodeAccumulating(json.hcursor)
// Validated[NonEmptyList[DecodingFailure], User]Memilih Gaya Derivasi
Gunakan auto untuk prototipe cepat dan semiauto untuk kode produksi yang membutuhkan instance tetap serta kompilasi lebih cepat.
Gunakan generic-extras saat Anda memerlukan penggantian nama, nilai bawaan, atau diskriminator.
Pemeriksaan Singkat
Uji pemahaman Anda tentang decoding ke dalam case class.
Ringkasan
Decoder[A] mengubah JSON menjadi nilai bertipe. Gunakan generic.auto atau semiauto.deriveDecoder untuk case class yang namanya cocok dengan kunci.
Kunci yang hilang mendekode field Option menjadi None; generic-extras menambahkan nilai bawaan dan penggantian nama; decodeAccumulating mengumpulkan semua kesalahan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendekode Menjadi Case Class” gratis?
Ya — teks lengkap “Mendekode Menjadi Case Class” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mendekode Menjadi Case Class”?
Petakan JSON ke tipe Anda. Kamu berlatih Scala for Backend Engineering & Functional Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Scala for Backend Engineering & Functional Programming?
Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mendekode Menjadi Case Class” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Scala for Backend Engineering & Functional Programming ini?
Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengurai JSON
- Mendekode Menjadi Case Class
- Menyandikan ke JSON
- Codec Khusus