Codifica e decodifica JSON
Converta da e verso JSON
Codifica e decodifica JSON è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.
L'oggetto Json
L'oggetto Json è il componente centrale per la codifica e la decodifica. L'istanza predefinita è pronta all'uso, oppure può crearne una configurata.
import kotlinx.serialization.json.Json
val json = JsonCodificare in una stringa
Utilizzi encodeToString per trasformare un oggetto in una stringa 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)
}Decodificare da una stringa
Utilizzi decodeFromString per analizzare il JSON e ricostruire un oggetto. Il tipo di destinazione viene dedotto oppure specificato esplicitamente.
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)
}Codificare le liste
Le collezioni vengono codificate automaticamente. Una lista di oggetti serializzabili diventa un array 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))
}Formattazione leggibile
Configuri un builder Json { } per abilitare l'output con rientri, utile per il logging e il debugging.
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)))
}Ignorare le chiavi sconosciute
Per impostazione predefinita, la decodifica fallisce se il JSON contiene chiavi non presenti nella classe. Imposti ignoreUnknownKeys = true per ignorarle: è utile quando le API evolvono.
import kotlinx.serialization.json.Json
val lenient = Json { ignoreUnknownKeys = true }Codificare i valori predefiniti
Per impostazione predefinita, le proprietà uguali al proprio valore predefinito non vengono scritte. Abiliti encodeDefaults = true per includerle sempre.
import kotlinx.serialization.json.Json
val withDefaults = Json { encodeDefaults = true }Lavorare con JsonElement
Per JSON dinamico può analizzare il contenuto in un albero JsonElement invece che in una classe tipizzata.
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
fun main() {
val element: JsonElement = Json.parseToJsonElement("{\"a\":1}")
println(element)
}Leggere i campi di JsonObject
Converta un JsonElement in JsonObject e acceda ai campi tramite chiave, quindi converta i valori primitivi.
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)
}Round trip
La codifica seguita dalla decodifica dovrebbe restituire un oggetto uguale all'originale (un round trip). È un ottimo modo per verificare rapidamente la correttezza del modello.
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)
}Errori comuni di decodifica
Presti attenzione a queste eccezioni a runtime:
SerializationException: Unexpected JSON token— JSON non valido- Campo obbligatorio mancante — al JSON manca una proprietà senza valore predefinito
- Chiave sconosciuta — disabiliti la modalità restrittiva con
ignoreUnknownKeys
Verifica rapida
La Sua API aggiunge frequentemente nuovi campi JSON. Quale configurazione impedisce che la decodifica si interrompa?
Riepilogo
Ora sa passare dagli oggetti al JSON e viceversa:
encodeToString/decodeFromString- Configurare con
Json { }:prettyPrint,ignoreUnknownKeys,encodeDefaults - Analizzare JSON dinamico tramite
JsonElement
Prossimo argomento: serializzatori personalizzati per i tipi non supportati.
Domande Frequenti
La lezione «Codifica e decodifica JSON» è gratuita?
Sì — il testo completo di «Codifica e decodifica JSON» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.
Cosa imparerò in «Codifica e decodifica JSON»?
Converta da e verso JSON Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Kotlin Academy?
Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Codifica e decodifica JSON»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?
Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurazione di kotlinx.serialization
- Classi serializzabili
- Codifica e decodifica JSON
- Serializer personalizzati