Mengurai JSON
Ubah teks menjadi nilai JSON.
Mengurai JSON adalah pelajaran Scala for Backend Engineering & Functional Programming gratis di CoddyKit. Ini adalah pelajaran 1 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.
Mengapa Circe?
Circe adalah pustaka JSON populer untuk Scala yang dibangun di atas ekosistem fungsional cats.
Circe mengutamakan keamanan tipe dan kekekalan: penguraian menghasilkan Either, bukan melempar kesalahan, dan decoding menghasilkan nilai bertipe, bukan peta tanpa tipe.
Pelajaran ini membahas cara mengubah teks JSON mentah menjadi model Json milik Circe.
Menambahkan Dependensi
Circe tersedia sebagai beberapa modul. Untuk penguraian dan model inti, Anda memerlukan circe-core dan circe-parser.
Modul circe-generic menambahkan derivasi codec otomatis, yang akan dibahas dalam pelajaran berikutnya.
libraryDependencies ++= Seq(
"io.circe" %% "circe-core" % "0.14.6",
"io.circe" %% "circe-parser" % "0.14.6"
)Fungsi parse
Titik masuk untuk membaca JSON adalah io.circe.parser.parse.
Fungsi ini menerima String dan mengembalikan Either[ParsingFailure, Json]. Sisi kiri menyimpan kesalahan sintaks; sisi kanan menyimpan pohon hasil penguraian.
import io.circe.parser._
val result = parse("{\"name\": \"Ada\", \"age\": 36}")
// result: Either[ParsingFailure, Json]Menangani Kegagalan Penguraian
Karena parse mengembalikan Either, Anda menangani kesalahan secara eksplisit dengan pencocokan pola atau kombinator, bukan dengan try/catch.
ParsingFailure menyertakan pesan yang mudah dipahami manusia untuk menjelaskan masalah sintaks.
parse("{ not valid }") match {
case Right(json) => println(json)
case Left(err) => println(s"Failed: ${err.message}")
}Model Json
Nilai yang berhasil diuraikan adalah Json—pohon kekal yang mewakili salah satu dari enam tipe JSON: objek, larik, string, angka, boolean, atau null.
Anda memeriksanya dengan predikat seperti isObject atau melakukan fold berdasarkan bentuknya.
val json = parse("[1, 2, 3]").getOrElse(Json.Null)
println(json.isArray) // true
println(json.isObject) // falseMenavigasi dengan Cursor
Untuk membaca data bertingkat, panggil .hcursor pada nilai Json. HCursor adalah zipper yang memungkinkan Anda berpindah melalui pohon.
Gunakan downField untuk turun ke kunci objek.
val json = parse("{\"user\": {\"name\": \"Ada\"}}").toOption.get
val cursor = json.hcursor
val name = cursor.downField("user").downField("name").as[String]
// name: Either[DecodingFailure, String] = Right(Ada)Mengekstrak Nilai dengan as
Setelah berada di posisi yang tepat, .as[A] mencoba mendekode nilai yang sedang dipilih menjadi tipe A.
Fungsi ini mengembalikan Either[DecodingFailure, A], sehingga ketidakcocokan tipe dilaporkan sebagai nilai, bukan pengecualian.
val json = parse("{\"age\": 36}").toOption.get
val age = json.hcursor.downField("age").as[Int]
println(age) // Right(36)parse vs decode
Gunakan parse saat Anda ingin memeriksa pohon mentah Json secara manual.
Gunakan decode[A] saat Anda ingin langsung mengubah String menjadi nilai bertipe A dalam satu langkah. Fungsi ini menggabungkan penguraian dan decoding.
import io.circe.parser.decode
val n: Either[io.circe.Error, Int] =
decode[Int]("42")
println(n) // Right(42)Field Opsional
JSON di dunia nyata sering kali tidak memiliki kunci tertentu. Metode cursor get[A] pada field yang telah diturunkan akan gagal jika field tidak ada, sedangkan getOrElse menyediakan nilai bawaan.
Decoding ke dalam Option[A] memperlakukan field yang hilang atau bernilai null sebagai None.
val json = parse("{\"name\": \"Ada\"}").toOption.get
val nick = json.hcursor.get[Option[String]]("nickname")
println(nick) // Right(None)Mengurai Larik
Anda dapat langsung mendekode larik JSON menjadi koleksi Scala dengan meminta List[A] atau Vector[A].
Circe memetakan setiap elemen dan langsung berhenti dengan DecodingFailure jika ada elemen yang tipenya salah.
import io.circe.parser.decode
val xs = decode[List[Int]]("[1, 2, 3]")
println(xs) // Right(List(1, 2, 3))Pencetakan Berformat
Nilai Json apa pun dapat dirender kembali menjadi teks dengan .noSpaces untuk keluaran ringkas atau .spaces2 untuk keluaran berindentasi.
Ini memungkinkan data hasil penguraian dikonversi kembali dan berguna untuk pencatatan atau penelusuran kesalahan.
val json = parse("{\"a\":1,\"b\":2}").toOption.get
println(json.noSpaces)
println(json.spaces2)Pemeriksaan Singkat
Uji pemahaman Anda tentang penguraian Circe.
Ringkasan
Anda telah mempelajari cara mengubah teks JSON menjadi model Circe. parse menghasilkan Either[ParsingFailure, Json]; decode[A] langsung menghasilkan nilai bertipe.
HCursor menavigasi dengan downField, sedangkan .as[A] mengekstrak nilai bertipe. Kegagalan adalah nilai, bukan pengecualian.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengurai JSON” gratis?
Ya — teks lengkap “Mengurai 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 “Mengurai JSON”?
Ubah teks menjadi nilai JSON. 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 1 dari 4.
Berapa lama pelajaran “Mengurai 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.