0Pricing
Scala for Backend Engineering & Functional Programming · Lektion

Zu JSON kodieren

Serialisieren Sie Ihre Daten.

Zu JSON kodieren ist eine kostenlose Scala for Backend Engineering & Functional Programming-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Scala for Backend Engineering & Functional Programming-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Encoder erzeugen JSON

Ein Encoder[A] ist das Gegenstück zu einem Decoder: Er wandelt einen Scala-Wert des Typs A in einen Circe-Json-Baum um.

Anschließend serialisieren Sie ihn für HTTP-Antworten, Logs oder die Speicherung in einen String.

Die asJson-Syntax

Importieren Sie io.circe.syntax._, um für jeden Wert, für den ein Encoder im Gültigkeitsbereich vorhanden ist, die Erweiterungsmethode .asJson zu erhalten.

Primitive Werte und Kollektionen funktionieren sofort.

import io.circe.syntax._

println(42.asJson.noSpaces)        // 42
println("hi".asJson.noSpaces)      // "hi"
println(List(1,2,3).asJson.noSpaces)  // [1,2,3]

Encoder ableiten

Wie Decoder werden auch Encoder für Case Classes abgeleitet. Importieren Sie io.circe.generic.auto._ für die automatische Ableitung.

Feldnamen werden zu JSON-Schlüsseln und Feldwerte rekursiv encodiert.

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}

Halbautomatische Encoder

Für explizite, wiederverwendbare Instanzen verwenden Sie deriveEncoder aus io.circe.generic.semiauto.

Wenn Sie die Instanz im Companion Object platzieren, steht eine gemeinsame Encoder[User]-Instanz in der gesamten Codebasis zur Verfügung.

import io.circe.Encoder
import io.circe.generic.semiauto._

object User {
  implicit val enc: Encoder[User] = deriveEncoder[User]
}

Json manuell erstellen

Sie können JSON direkt mit Json.obj und Schlüssel-Wert-Paaren erstellen, wobei die Werte .asJson verwenden.

Das ist praktisch für spontan erstellte Strukturen, die keiner Case Class entsprechen.

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}

Optionen beim Encodieren

Ein Feld vom Typ Option[A] wird standardmäßig als Wert encodiert, wenn es Some(x) enthält, und als JSON-null, wenn es None enthält.

Wenn Sie null-Schlüssel lieber vollständig weglassen möchten, können Sie sie nach dem Encodieren entfernen, wie später gezeigt wird.

case class Account(id: Long, nick: Option[String])
println(Account(7, None).asJson.noSpaces)
// {"id":7,"nick":null}

Nullwerte entfernen

Um Nullwerte wegzulassen, transformieren Sie das resultierende Json mit .deepDropNullValues.

Dadurch werden Schlüssel, deren Wert null ist, rekursiv entfernt. Das erzeugt bei optionalen Feldern eine übersichtlichere Ausgabe.

val clean = Account(7, None).asJson.deepDropNullValues
println(clean.noSpaces)
// {"id":7}

Ausgabe mit Pretty Printing

Verwenden Sie .spaces2 oder .spaces4 für eingerücktes, gut lesbares JSON und .noSpaces für ein kompaktes Übertragungsformat.

Für vollständige Kontrolle über die Formatierung erstellen Sie einen benutzerdefinierten Printer.

import io.circe.Printer

val printer = Printer.spaces2.copy(dropNullValues = true)
println(printer.print(Account(7, None).asJson))

Maps codieren

Ein Map[String, A] wird in ein JSON-Objekt codiert, wobei die Map-Schlüssel zu JSON-Schlüsseln werden.

Für Schlüsseltypen, die keine Strings sind, müssen Sie einen KeyEncoder bereitstellen, der den Schlüssel als Text darstellt.

import io.circe.syntax._

val scores = Map("ada" -> 90, "alan" -> 85)
println(scores.asJson.noSpaces)
// {"ada":90,"alan":85}

Über Encoders abbilden

Sie können einen vorhandenen Encoder mit contramap anpassen: Übergeben Sie eine Funktion von Ihrem Typ zu einem Typ, den Circe bereits codieren kann.

So müssen Sie keinen vollständigen Encoder von Grund auf schreiben.

import io.circe.Encoder

case class UserId(value: Long)
implicit val enc: Encoder[UserId] =
  Encoder[Long].contramap(_.value)

Gemeinsam codieren und decodieren

Wenn Sie beide Richtungen benötigen, leiten Sie mit deriveCodec einen einzelnen Codec[A] ab, der einen Encoder und einen Decoder bündelt.

So bleiben beide synchron, wenn sich die Case-Klasse weiterentwickelt.

import io.circe.Codec
import io.circe.generic.semiauto._

implicit val codec: Codec[User] = deriveCodec[User]

Kurzer Test

Testen Sie Ihr Verständnis der JSON-Codierung.

Zusammenfassung

Ein Encoder[A] wandelt Scala-Werte in Json um. Verwenden Sie .asJson mit abgeleiteten Encodern oder erstellen Sie Bäume mit Json.obj.

None wird zu null, sofern Sie es nicht entfernen; contramap verwendet Encoder wieder; deriveCodec bündelt beide Richtungen.

Häufig gestellte Fragen

Ist die Lektion „Zu JSON kodieren“ kostenlos?

Ja — der vollständige Text von „Zu JSON kodieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Scala for Backend Engineering & Functional Programming-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Zu JSON kodieren“?

Serialisieren Sie Ihre Daten. Du übst Scala for Backend Engineering & Functional Programming mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Scala for Backend Engineering & Functional Programming zu starten?

Keine Vorkenntnisse erforderlich. Scala for Backend Engineering & Functional Programming auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Zu JSON kodieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Scala for Backend Engineering & Functional Programming-Lektion Code schreiben und ausführen?

Ja. Jede Scala for Backend Engineering & Functional Programming-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. JSON parsen
  2. In Case Classes dekodieren
  3. Zu JSON kodieren
  4. Benutzerdefinierte Codecs
← Zurück zu Scala for Backend Engineering & Functional Programming