0Pricing
Kotlin Academy · Lezione

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 = Json

Codificare 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

  1. Configurazione di kotlinx.serialization
  2. Classi serializzabili
  3. Codifica e decodifica JSON
  4. Serializer personalizzati
← Torna a Kotlin Academy