JSON-kodning og -afkodning
Konvertér til og fra JSON
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 = JsonKodning 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.
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
- Opsætning af kotlinx.serialization
- Serializable-klasser
- JSON-kodning og -afkodning
- Brugerdefinerede serializere