Kotlin Academy · Lektion

JSON-kodning og -afkodning

Konvertér til og fra JSON

Lektion 3 af 413 trin

JSON-kodning og -afkodning er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Json-objektet

Objektet Json er kernen i kodning og afkodning. Standardinstansen er klar til brug, eller du kan opbygge en konfigureret instans.

import kotlinx.serialization.json.Json

val json = Json

Kodning til en streng

Brug encodeToString til at omdanne et objekt til en JSON-streng.

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

@Serializable
data class Book(val title: String, val pages: Int)

fun main() {
    val book = Book("Kotlin in Action", 360)
    val text = Json.encodeToString(book)
    println(text)
}

Afkodning fra en streng

Brug decodeFromString til at fortolke JSON tilbage til et objekt. Måltypen udledes automatisk eller angives eksplicit.

import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

@Serializable
data class Book(val title: String, val pages: Int)

fun main() {
    val text = "{\"title\":\"Atomic Kotlin\",\"pages\":500}"
    val book = Json.decodeFromString<Book>(text)
    println(book.title)
}

Kodning af lister

Samlinger kodes automatisk. En liste med serialiserbare objekter bliver til et JSON-array.

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

@Serializable
data class Tag(val name: String)

fun main() {
    val tags = listOf(Tag("kotlin"), Tag("json"))
    println(Json.encodeToString(tags))
}

Formatering med indryk

Konfigurér en Json { }-builder for at aktivere output med indryk, hvilket er nyttigt til logning og fejlfinding.

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

@Serializable
data class Point(val x: Int, val y: Int)

val pretty = Json { prettyPrint = true }

fun main() {
    println(pretty.encodeToString(Point(1, 2)))
}

Ignorering af ukendte nøgler

Som standard mislykkes afkodningen, hvis JSON indeholder nøgler, der ikke findes i din klasse. Angiv ignoreUnknownKeys = true for at springe dem over – praktisk for API'er i udvikling.

import kotlinx.serialization.json.Json

val lenient = Json { ignoreUnknownKeys = true }

Kodning af standardværdier

Som standard skrives egenskaber, der er lig med deres standardværdi, ikke. Aktivér encodeDefaults = true for altid at inkludere dem.

import kotlinx.serialization.json.Json

val withDefaults = Json { encodeDefaults = true }

Arbejde med JsonElement

For dynamisk JSON kan du fortolke det til et JsonElement-træ i stedet for en typebestemt klasse.

import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement

fun main() {
    val element: JsonElement = Json.parseToJsonElement("{\"a\":1}")
    println(element)
}

Læsning af JsonObject-felter

Konvertér et JsonElement til JsonObject, og tilgå felterne med deres nøgler. Konvertér derefter de primitive værdier.

import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.int

fun main() {
    val obj = Json.parseToJsonElement("{\"a\":1}").jsonObject
    val a = obj["a"]!!.jsonPrimitive.int
    println(a)
}

Tur-retur-kodning

Hvis du koder og derefter afkoder, bør du få et tilsvarende objekt tilbage – en tur-retur. Det er en god måde at kontrollere din model på.

import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json

@Serializable
data class P(val x: Int)

fun main() {
    val original = P(42)
    val back = Json.decodeFromString<P>(Json.encodeToString(original))
    println(original == back)
}

Almindelige afkodningsfejl

Vær opmærksom på disse undtagelser under kørsel:

  • SerializationException: Unexpected JSON token — ugyldig JSON
  • Manglende påkrævet felt — JSON mangler en egenskab uden standardværdi
  • Ukendt nøgle — deaktivér streng kontrol med ignoreUnknownKeys

Hurtig kontrol

Dit API tilføjer ofte nye JSON-felter. Hvilken konfiguration forhindrer, at afkodningen går i stykker?

Opsummering

Du kan nu bevæge dig mellem objekter og JSON:

  • encodeToString / decodeFromString
  • Konfigurér med Json { }: prettyPrint, ignoreUnknownKeys, encodeDefaults
  • Fortolk dynamisk JSON via JsonElement

Næste trin: brugerdefinerede serialiseringskomponenter til typer, der ikke understøttes.

Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “JSON-kodning og -afkodning” gratis?

Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “JSON-kodning og -afkodning”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “JSON-kodning og -afkodning”?

Konvertér til og fra JSON Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Kotlin Academy?

Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “JSON-kodning og -afkodning”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?

Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Opsætning af kotlinx.serialization
  2. Serializable-klasser
  3. JSON-kodning og -afkodning
  4. Brugerdefinerede serializere
← Tilbage til Kotlin Academy