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 = JsonKodowanie 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
- Konfiguracja kotlinx.serialization
- Klasy serializowalne
- Kodowanie i dekodowanie JSON
- Niestandardowe serializery