0Pricing
Kotlin Academy · Lekcja

Kodowanie i dekodowanie JSON

Konwertuj do JSON i z JSON

Kodowanie i dekodowanie JSON to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Obiekt Json

Obiekt Json stanowi podstawę kodowania i dekodowania. Domyślna instancja jest gotowa do użycia, ale można również utworzyć skonfigurowaną instancję.

import kotlinx.serialization.json.Json

val json = Json

Kodowanie do ciągu znaków

Za pomocą encodeToString można przekształcić obiekt w ciąg JSON.

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)
}

Dekodowanie z ciągu znaków

Za pomocą decodeFromString można przeanalizować JSON i z powrotem utworzyć obiekt. Typ docelowy jest wywnioskowany lub podany jawnie.

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)
}

Kodowanie list

Kolekcje są kodowane automatycznie. Lista serializowalnych obiektów staje się tablicą JSON.

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))
}

Czytelny format wyjściowy

Aby włączyć wynik z wcięciami, należy skonfigurować konstruktor Json { }. Jest to przydatne podczas logowania i debugowania.

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)))
}

Pomijanie nieznanych kluczy

Domyślnie dekodowanie kończy się błędem, jeśli JSON zawiera klucze, których nie ma w klasie. Ustawienie ignoreUnknownKeys = true powoduje ich pomijanie — jest to przydatne w przypadku rozwijających się interfejsów API.

import kotlinx.serialization.json.Json

val lenient = Json { ignoreUnknownKeys = true }

Kodowanie wartości domyślnych

Domyślnie właściwości równe wartości domyślnej nie są zapisywane. Ustawienie encodeDefaults = true powoduje ich dołączanie w każdym przypadku.

import kotlinx.serialization.json.Json

val withDefaults = Json { encodeDefaults = true }

Praca z JsonElement

W przypadku dynamicznego JSON można przeanalizować dane do postaci drzewa JsonElement zamiast do typowanej klasy.

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

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

Odczytywanie pól JsonObject

Należy rzutować JsonElement na JsonObject, uzyskać dostęp do pól za pomocą kluczy, a następnie przekonwertować wartości prymitywne.

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)
}

Pełny cykl kodowania i dekodowania

Zakodowanie, a następnie zdekodowanie obiektu powinno zwrócić obiekt równy oryginałowi (jest to pełny cykl). To świetny sposób na szybką weryfikację poprawności modelu.

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)
}

Typowe błędy dekodowania

Należy uważać na następujące wyjątki występujące w czasie działania:

  • SerializationException: Unexpected JSON token — nieprawidłowy JSON
  • Brak wymaganego pola — w JSON brakuje właściwości bez wartości domyślnej
  • Nieznany klucz — rygorystyczne sprawdzanie można wyłączyć za pomocą ignoreUnknownKeys

Szybkie sprawdzenie

Interfejs API często dodaje nowe pola JSON. Która konfiguracja zapobiega przerwaniu dekodowania?

Podsumowanie

Można teraz konwertować obiekty na JSON i z powrotem:

  • encodeToString / decodeFromString
  • Konfiguracja za pomocą Json { }: prettyPrint, ignoreUnknownKeys, encodeDefaults
  • Analizowanie dynamicznego JSON za pomocą JsonElement

Następny temat: własne serializatory dla nieobsługiwanych typów.

Często zadawane pytania

Czy lekcja „Kodowanie i dekodowanie JSON” jest bezpłatna?

Tak — pełny tekst „Kodowanie i dekodowanie JSON” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Kodowanie i dekodowanie JSON”?

Konwertuj do JSON i z JSON Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Kodowanie i dekodowanie JSON”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja kotlinx.serialization
  2. Klasy serializowalne
  3. Kodowanie i dekodowanie JSON
  4. Niestandardowe serializery
← Powrót do Kotlin Academy