0Pricing
Scala for Backend Engineering & Functional Programming · Pelajaran

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

  1. Mengurai JSON
  2. Mendekode Menjadi Case Class
  3. Menyandikan ke JSON
  4. Codec Khusus
← Kembali ke Scala for Backend Engineering & Functional Programming