JSON-koodaus ja -dekoodaus
Muunna JSON-muotoon ja siitä pois
JSON-koodaus ja -dekoodaus on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Json-objekti
Json-objekti on enkoodauksen ja dekoodauksen ydin. Oletusinstanssi on heti käytettävissä, tai voitte luoda asetuksilla määritetyn instanssin.
import kotlinx.serialization.json.Json
val json = JsonMerkkijonoksi enkoodaaminen
Käyttäkää encodeToString-funktiota objektin muuttamiseen JSON-merkkijonoksi.
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)
}Merkkijonosta dekoodaaminen
Käyttäkää decodeFromString-funktiota JSONin jäsentämiseen takaisin objektiksi. Kohdetyyppi päätellään automaattisesti tai annetaan eksplisiittisesti.
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)
}Listojen enkoodaaminen
Kokoelmat enkoodataan automaattisesti. Serialisoitavien objektien lista muuttuu JSON-taulukoksi.
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))
}Kaunis tulostus
Määrittäkää Json { }-rakennus sisennetyn tulostuksen käyttöön ottamiseksi. Se on hyödyllinen lokituksessa ja virheenkorjauksessa.
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)))
}Tuntemattomien avainten ohittaminen
Oletusarvoisesti dekoodaus epäonnistuu, jos JSON sisältää luokkaan kuulumattomia avaimia. Asettakaa ignoreUnknownKeys = true ohittamaan ne — kätevää muuttuvien ohjelmointirajapintojen kanssa.
import kotlinx.serialization.json.Json
val lenient = Json { ignoreUnknownKeys = true }Oletusarvojen enkoodaaminen
Oletusarvoisesti oletusarvoaan vastaavia ominaisuuksia ei kirjoiteta. Ottakaa encodeDefaults = true käyttöön, jotta ne sisällytetään aina.
import kotlinx.serialization.json.Json
val withDefaults = Json { encodeDefaults = true }JsonElementin käsittely
Dynaamista JSONia varten voitte jäsentää sisällön JsonElement-puuksi tyypitetyn luokan sijaan.
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
fun main() {
val element: JsonElement = Json.parseToJsonElement("{\"a\":1}")
println(element)
}JsonObject-kenttien lukeminen
Voitte muuntaa JsonElement-elementin JsonObject-tyypiksi, käyttää kenttiä avainten perusteella ja muuntaa sitten primitiivit.
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)
}Edestakainen muunnos
Enkoodauksen ja sitä seuraavan dekoodauksen pitäisi palauttaa samaa vastaava objekti. Tämä on hyvä tapa tarkistaa mallin toimivuus.
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)
}Yleiset dekoodausvirheet
Huomioikaa nämä ajonaikaiset poikkeukset:
SerializationException: Unexpected JSON token— virheellinen JSON- Pakollinen kenttä puuttuu — JSON ei sisällä oletusarvotonta ominaisuutta
- Tuntematon avain — poistakaa tiukka tarkistus käytöstä asetuksella
ignoreUnknownKeys
Pikatarkistus
Ohjelmointirajapintanne lisää usein uusia JSON-kenttiä. Mikä asetus estää dekoodauksen rikkoutumisen?
Kertaus
Voitte nyt siirtyä objektien ja JSONin välillä:
encodeToString/decodeFromString- Määrittäkää
Json { }-asetuksilla:prettyPrint,ignoreUnknownKeys,encodeDefaults - Jäsentäkää dynaaminen JSON
JsonElement-elementin avulla
Seuraavaksi tutustutte mukautettuihin serialisoijiin tukemattomia tyyppejä varten.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”JSON-koodaus ja -dekoodaus” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “JSON-koodaus ja -dekoodaus”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”JSON-koodaus ja -dekoodaus”?
Muunna JSON-muotoon ja siitä pois Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”JSON-koodaus ja -dekoodaus”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?
Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- kotlinx.serializationin käyttöönotto
- Serializable-luokat
- JSON-koodaus ja -dekoodaus
- Mukautetut serialisoijat