Analizzare JSON
Trasformi il testo in valori JSON.
Analizzare JSON è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 1 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 Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Perché Circe?
Circe è una popolare libreria JSON per Scala, basata sull'ecosistema funzionale cats.
Privilegia la sicurezza dei tipi e l'immutabilità: il parsing restituisce un Either invece di generare eccezioni e la decodifica produce valori tipizzati anziché mappe non tipizzate.
Questa lezione illustra come trasformare testo JSON grezzo nel modello Json di Circe.
Aggiungere la dipendenza
Circe è distribuito in diversi moduli. Per il parsing e il modello di base servono circe-core e circe-parser.
Il modulo circe-generic aggiunge la derivazione automatica dei codec, che verrà trattata nelle lezioni successive.
libraryDependencies ++= Seq(
"io.circe" %% "circe-core" % "0.14.6",
"io.circe" %% "circe-parser" % "0.14.6"
)La funzione parse
Il punto di ingresso per leggere JSON è io.circe.parser.parse.
Accetta una String e restituisce Either[ParsingFailure, Json]. Il lato sinistro contiene gli errori di sintassi; quello destro contiene l'albero analizzato.
import io.circe.parser._
val result = parse("{\"name\": \"Ada\", \"age\": 36}")
// result: Either[ParsingFailure, Json]Gestire gli errori di parsing
Poiché parse restituisce un Either, gli errori vengono gestiti esplicitamente con il pattern matching o con i combinatori, invece di usare try/catch.
Un ParsingFailure include un messaggio comprensibile che descrive il problema di sintassi.
parse("{ not valid }") match {
case Right(json) => println(json)
case Left(err) => println(s"Failed: ${err.message}")
}Il modello Json
Un valore analizzato correttamente è un Json, cioè un albero immutabile che rappresenta uno dei sei tipi JSON: oggetto, array, stringa, numero, booleano o null.
È possibile esaminarlo con predicati come isObject oppure applicare un fold alla sua struttura.
val json = parse("[1, 2, 3]").getOrElse(Json.Null)
println(json.isArray) // true
println(json.isObject) // falseNavigare con il cursore
Per accedere ai dati annidati, chiami .hcursor su un valore Json. HCursor è uno zipper che consente di spostarsi nell'albero.
Utilizzi downField per scendere fino a una chiave di un oggetto.
val json = parse("{\"user\": {\"name\": \"Ada\"}}").toOption.get
val cursor = json.hcursor
val name = cursor.downField("user").downField("name").as[String]
// name: Either[DecodingFailure, String] = Right(Ada)Estrarre valori con as
Una volta posizionati, .as[A] tenta di decodificare il valore corrente nel tipo A.
Restituisce Either[DecodingFailure, A], quindi una mancata corrispondenza di tipo viene segnalata come valore, non come eccezione.
val json = parse("{\"age\": 36}").toOption.get
val age = json.hcursor.downField("age").as[Int]
println(age) // Right(36)parse e decode
Utilizzi parse quando desidera esaminare manualmente l'albero Json grezzo.
Utilizzi decode[A] quando desidera passare direttamente da String a un valore tipizzato A in un solo passaggio. Combina parsing e decodifica.
import io.circe.parser.decode
val n: Either[io.circe.Error, Int] =
decode[Int]("42")
println(n) // Right(42)Campi facoltativi
Il JSON del mondo reale contiene spesso chiavi mancanti. Il metodo del cursore get[A] applicato a un campo raggiunto fallisce se questo è assente, mentre getOrElse fornisce un valore predefinito.
La decodifica in Option[A] tratta un campo mancante o nullo come None.
val json = parse("{\"name\": \"Ada\"}").toOption.get
val nick = json.hcursor.get[Option[String]]("nickname")
println(nick) // Right(None)Analizzare gli array
È possibile decodificare direttamente un array JSON in una raccolta Scala richiedendo List[A] o Vector[A].
Circe mappa ogni elemento e interrompe l'operazione restituendo un DecodingFailure se un elemento ha il tipo errato.
import io.circe.parser.decode
val xs = decode[List[Int]]("[1, 2, 3]")
println(xs) // Right(List(1, 2, 3))Formattazione leggibile
Qualsiasi valore Json può essere riconvertito in testo con .noSpaces per un output compatto oppure con .spaces2 per un output indentato.
Questo consente di effettuare il round-trip dei dati analizzati ed è utile per il logging o il debugging.
val json = parse("{\"a\":1,\"b\":2}").toOption.get
println(json.noSpaces)
println(json.spaces2)Verifica rapida
Verifichi la propria comprensione del parsing con Circe.
Riepilogo
Ha imparato a trasformare il testo JSON nel modello di Circe. parse restituisce Either[ParsingFailure, Json]; decode[A] passa direttamente a un valore tipizzato.
HCursor consente di navigare con downField, mentre .as[A] estrae valori tipizzati. Gli errori sono valori, non eccezioni.
Domande Frequenti
La lezione «Analizzare JSON» è gratuita?
Sì — il testo completo di «Analizzare 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 Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Cosa imparerò in «Analizzare JSON»?
Trasformi il testo in valori JSON. Eserciti Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?
Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Analizzare 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 Scala for Backend Engineering & Functional Programming?
Sì. Ogni lezione Scala for Backend Engineering & Functional Programming 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.