Menyandikan ke JSON
Serialisasikan data Anda.
Menyandikan ke JSON adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 3 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.
Encoder Menghasilkan JSON
Encoder[A] adalah kebalikan dari decoder: encoder mengubah nilai Scala bertipe A menjadi pohon Json Circe.
Dari sana, Anda membuat serialisasi menjadi String untuk respons HTTP, catatan, atau penyimpanan.
Sintaks asJson
Impor io.circe.syntax._ untuk mendapatkan metode ekstensi .asJson pada nilai apa pun yang memiliki Encoder dalam cakupannya.
Tipe primitif dan koleksi langsung dapat digunakan.
import io.circe.syntax._
println(42.asJson.noSpaces) // 42
println("hi".asJson.noSpaces) // "hi"
println(List(1,2,3).asJson.noSpaces) // [1,2,3]Menurunkan Encoder
Sama seperti decoder, encoder untuk case class juga diturunkan. Impor io.circe.generic.auto._ untuk derivasi otomatis.
Nama field menjadi kunci JSON, dan nilai field dienkode secara rekursif.
import io.circe.generic.auto._
import io.circe.syntax._
case class User(name: String, age: Int)
println(User("Ada", 36).asJson.noSpaces)
// {"name":"Ada","age":36}Encoder Semi-Otomatis
Untuk instance yang eksplisit dan dapat digunakan kembali, gunakan deriveEncoder dari io.circe.generic.semiauto.
Menempatkannya di objek pendamping memberi Anda satu Encoder[User] yang digunakan bersama di seluruh basis kode.
import io.circe.Encoder
import io.circe.generic.semiauto._
object User {
implicit val enc: Encoder[User] = deriveEncoder[User]
}Membangun Json Secara Manual
Anda dapat membuat JSON secara langsung dengan Json.obj dan pasangan kunci/nilai, dengan nilai menggunakan .asJson.
Ini berguna untuk bentuk data khusus yang tidak sesuai dengan case class.
import io.circe.Json
import io.circe.syntax._
val j = Json.obj(
"ok" -> true.asJson,
"count" -> 3.asJson
)
println(j.noSpaces) // {"ok":true,"count":3}Opsi Encoding
Field Option[A] mengenkode Some(x) sebagai nilainya dan None sebagai JSON null secara bawaan.
Jika Anda lebih memilih untuk sepenuhnya menghilangkan kunci null, Anda dapat membuangnya setelah encoding, seperti yang ditunjukkan nanti.
case class Account(id: Long, nick: Option[String])
println(Account(7, None).asJson.noSpaces)
// {"id":7,"nick":null}Menghapus Nilai Null
Untuk menghilangkan null, ubah Json yang dihasilkan dengan .deepDropNullValues.
Ini menghapus secara rekursif kunci yang nilainya null, sehingga menghasilkan keluaran yang lebih bersih untuk field opsional.
val clean = Account(7, None).asJson.deepDropNullValues
println(clean.noSpaces)
// {"id":7}Mencetak Keluaran Berformat
Gunakan .spaces2 atau .spaces4 untuk JSON berindentasi yang mudah dibaca manusia, dan .noSpaces untuk format ringkas saat dikirim melalui jaringan.
Untuk kendali penuh atas pemformatan, buat Printer kustom.
import io.circe.Printer
val printer = Printer.spaces2.copy(dropNullValues = true)
println(printer.print(Account(7, None).asJson))Mengenkode Map
Map[String, A] dienkode menjadi objek JSON, dengan kunci map menjadi kunci JSON.
Untuk tipe kunci selain string, Anda harus menyediakan KeyEncoder yang mengubah kunci menjadi teks.
import io.circe.syntax._
val scores = Map("ada" -> 90, "alan" -> 85)
println(scores.asJson.noSpaces)
// {"ada":90,"alan":85}Memetakan Encoder
Anda dapat menyesuaikan encoder yang sudah ada dengan contramap: berikan fungsi dari tipe Anda ke tipe yang sudah dapat dienkode oleh Circe.
Dengan demikian, Anda tidak perlu menulis encoder lengkap dari awal.
import io.circe.Encoder
case class UserId(value: Long)
implicit val enc: Encoder[UserId] =
Encoder[Long].contramap(_.value)Mengenkode dan Mendekode Bersama
Saat memerlukan kedua arah, turunkan satu Codec[A] dengan deriveCodec, yang menggabungkan encoder dan decoder.
Dengan demikian, keduanya tetap selaras saat case class berkembang.
import io.circe.Codec
import io.circe.generic.semiauto._
implicit val codec: Codec[User] = deriveCodec[User]Pemeriksaan Singkat
Uji pemahaman Anda tentang encoding ke JSON.
Ringkasan
Encoder[A] mengubah nilai Scala menjadi Json. Gunakan .asJson dengan encoder turunan, atau buat struktur dengan Json.obj.
None menjadi null kecuali dihapus; contramap menggunakan kembali encoder; deriveCodec menggabungkan kedua arah.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menyandikan ke JSON” gratis?
Ya — teks lengkap “Menyandikan ke JSON” 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 “Menyandikan ke JSON”?
Serialisasikan data 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 3 dari 4.
Berapa lama pelajaran “Menyandikan ke JSON” 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