Menghuraikan JSON
Tukar teks kepada nilai JSON.
Menghuraikan JSON ialah pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.
Mengapa Circe?
Circe ialah pustaka JSON yang popular untuk Scala, dibina berasaskan ekosistem fungsi cats.
Circe mengutamakan keselamatan jenis dan kebolehubahan: penghuraian mengembalikan Either dan bukannya melontarkan pengecualian, manakala penyahkodan menghasilkan nilai berjenis dan bukannya peta tanpa jenis.
Pelajaran ini menerangkan cara menukar teks JSON mentah kepada model Json Circe.
Menambah Kebergantungan
Circe dihantar sebagai beberapa modul. Untuk penghuraian dan model teras, anda memerlukan circe-core dan circe-parser.
Modul circe-generic menambah penerbitan codec automatik, yang akan dibincangkan dalam pelajaran kemudian.
libraryDependencies ++= Seq(
"io.circe" %% "circe-core" % "0.14.6",
"io.circe" %% "circe-parser" % "0.14.6"
)Fungsi parse
Titik mula untuk membaca JSON ialah io.circe.parser.parse.
Ia menerima String dan mengembalikan Either[ParsingFailure, Json]. Bahagian kiri menyimpan ralat sintaks; bahagian kanan mengandungi pepohon yang telah dihuraikan.
import io.circe.parser._
val result = parse("{\"name\": \"Ada\", \"age\": 36}")
// result: Either[ParsingFailure, Json]Mengendalikan Kegagalan Penghuraian
Oleh sebab parse mengembalikan Either, anda mengendalikan ralat secara jelas dengan padanan corak atau penggabung, bukannya try/catch.
ParsingFailure mengandungi mesej yang mudah difahami manusia untuk menerangkan masalah sintaks.
parse("{ not valid }") match {
case Right(json) => println(json)
case Left(err) => println(s"Failed: ${err.message}")
}Model Json
Nilai yang berjaya dihuraikan ialah Json — pepohon tidak berubah yang mewakili salah satu daripada enam jenis JSON: objek, tatasusunan, rentetan, nombor, boolean atau null.
Anda memeriksanya dengan predikat seperti isObject atau melipat berdasarkan bentuknya.
val json = parse("[1, 2, 3]").getOrElse(Json.Null)
println(json.isArray) // true
println(json.isObject) // falseMenavigasi dengan Kursor
Untuk membaca data bersarang, panggil .hcursor pada nilai Json. HCursor ialah ziper yang membolehkan anda bergerak melalui pepohon.
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 pada kedudukan yang betul, .as[A] cuba menyahkod nilai yang difokuskan kepada jenis A.
Ia mengembalikan Either[DecodingFailure, A], jadi ketidakpadanan jenis dilaporkan sebagai nilai, bukannya pengecualian.
val json = parse("{\"age\": 36}").toOption.get
val age = json.hcursor.downField("age").as[Int]
println(age) // Right(36)parse berbanding decode
Gunakan parse apabila anda mahu memeriksa pepohon mentah Json secara manual.
Gunakan decode[A] apabila anda mahu terus menukar String kepada nilai berjenis A dalam satu langkah. Ia menggabungkan penghuraian dan penyahkodan.
import io.circe.parser.decode
val n: Either[io.circe.Error, Int] =
decode[Int]("42")
println(n) // Right(42)Medan Pilihan
JSON dunia sebenar sering tidak mempunyai kunci tertentu. Kaedah kursor get[A] pada medan yang telah diturunkan akan gagal jika medan itu tiada, manakala getOrElse membekalkan nilai lalai.
Menyahkod kepada Option[A] menganggap medan yang tiada atau null sebagai None.
val json = parse("{\"name\": \"Ada\"}").toOption.get
val nick = json.hcursor.get[Option[String]]("nickname")
println(nick) // Right(None)Menghuraikan Tatasusunan
Anda boleh menyahkod tatasusunan JSON terus kepada koleksi Scala dengan meminta List[A] atau Vector[A].
Circe memetakan setiap elemen dan berhenti sebaik sahaja berlaku kegagalan dengan DecodingFailure jika mana-mana elemen mempunyai jenis yang salah.
import io.circe.parser.decode
val xs = decode[List[Int]]("[1, 2, 3]")
println(xs) // Right(List(1, 2, 3))Cetakan Cantik
Sebarang nilai Json boleh dipaparkan semula sebagai teks dengan .noSpaces untuk output padat atau .spaces2 untuk output berinden.
Ini mengekalkan data yang dihuraikan dan berguna untuk pengelogan atau penyahpepijatan.
val json = parse("{\"a\":1,\"b\":2}").toOption.get
println(json.noSpaces)
println(json.spaces2)Semakan Pantas
Uji pemahaman anda tentang penghuraian Circe.
Imbas Kembali
Anda telah belajar menukar teks JSON kepada model Circe. parse menghasilkan Either[ParsingFailure, Json]; decode[A] terus menghasilkan nilai berjenis.
HCursor menavigasi dengan downField, manakala .as[A] mengekstrak nilai berjenis. Kegagalan ialah nilai, bukan pengecualian.
Pelajari Scala dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 143
Soalan Lazim
Adakah pelajaran “Menghuraikan JSON” percuma?
Ya — teks penuh “Menghuraikan JSON” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, tingkat taraf kepada CoddyKit PRO. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menghuraikan JSON”?
Tukar teks kepada nilai JSON. Anda berlatih Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Menghuraikan JSON” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian ini?
Ya. Setiap pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Menghuraikan JSON
- Menyahkod kepada Case Class
- Mengekod kepada JSON
- Codec Tersuai