Scala for backendutvikling og funksjonell programmering · leksjon

Analyser JSON

Gjør tekst om til JSON-verdier.

Leksjon 1 av 413 trinn

Analyser JSON er en gratis leksjon i Scala for backendutvikling og funksjonell programmering på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Scala for backendutvikling og funksjonell programmering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.

Hvorfor Circe?

Circe er et populært JSON-bibliotek for Scala, bygget oppå det funksjonelle økosystemet cats.

Det legger vekt på typesikkerhet og uforanderlighet: parsing returnerer en Either i stedet for å kaste et unntak, og dekoding produserer typede verdier i stedet for utypede kart.

I denne leksjonen lærer du å gjøre rå JSON-tekst om til Circes Json-modell.

Legge til avhengigheten

Circe leveres som flere moduler. For parsing og kjernemodellen trenger du circe-core og circe-parser.

Modulen circe-generic legger til automatisk utledning av kodeker, som dekkes i senere leksjoner.

libraryDependencies ++= Seq(
  "io.circe" %% "circe-core" % "0.14.6",
  "io.circe" %% "circe-parser" % "0.14.6"
)

parse-funksjonen

Inngangspunktet for å lese JSON er io.circe.parser.parse.

Den tar en String og returnerer Either[ParsingFailure, Json]. Venstresiden inneholder syntaksfeil, mens høyresiden inneholder det analyserte treet.

import io.circe.parser._

val result = parse("{\"name\": \"Ada\", \"age\": 36}")
// result: Either[ParsingFailure, Json]

Håndtere parse-feil

Fordi parse returnerer en Either, håndterer du feil eksplisitt med mønstermatching eller kombinatorer i stedet for try/catch.

En ParsingFailure inneholder en menneskeleselig melding som beskriver syntaksproblemet.

parse("{ not valid }") match {
  case Right(json) => println(json)
  case Left(err)   => println(s"Failed: ${err.message}")
}

Json-modellen

En verdi som er analysert uten feil, er en Json — et uforanderlig tre som representerer én av de seks JSON-typene: objekt, tabell, streng, tall, boolsk verdi eller null.

Du undersøker den med predikater som isObject eller folder over strukturen.

val json = parse("[1, 2, 3]").getOrElse(Json.Null)
println(json.isArray)   // true
println(json.isObject)  // false

Navigere med markøren

For å lese nestede data kaller du .hcursor på en Json-verdi. HCursor er en glidelåsstruktur som lar deg bevege deg gjennom treet.

Bruk downField for å gå ned til en nøkkel i et objekt.

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)

Hente ut verdier med as

Når markøren står på riktig sted, forsøker .as[A] å dekode verdien den fokuserer på, til typen A.

Den returnerer Either[DecodingFailure, A], slik at en typekonflikt rapporteres som en verdi og ikke som et unntak.

val json = parse("{\"age\": 36}").toOption.get
val age = json.hcursor.downField("age").as[Int]
println(age)  // Right(36)

parse kontra decode

Bruk parse når du vil ha det rå Json-treet for manuell inspeksjon.

Bruk decode[A] når du vil gå direkte fra String til en typet verdi A i ett trinn. Den kombinerer parsing og dekoding.

import io.circe.parser.decode

val n: Either[io.circe.Error, Int] =
  decode[Int]("42")
println(n)  // Right(42)

Valgfrie felt

JSON fra virkeligheten mangler ofte nøkler. Markørmetoden get[A] på et felt du har gått ned til, feiler hvis feltet mangler, mens getOrElse angir en standardverdi.

Dekoding til Option[A] behandler et manglende felt eller et null-felt som None.

val json = parse("{\"name\": \"Ada\"}").toOption.get
val nick = json.hcursor.get[Option[String]]("nickname")
println(nick)  // Right(None)

Parse tabeller

Du kan dekode en JSON-tabell direkte til en Scala-samling ved å be om List[A] eller Vector[A].

Circe mapper hvert element og avbryter med en DecodingFailure hvis et element har feil type.

import io.circe.parser.decode

val xs = decode[List[Int]]("[1, 2, 3]")
println(xs)  // Right(List(1, 2, 3))

Pen utskrift

Alle Json-verdier kan gjøres om til tekst igjen med .noSpaces for kompakt utskrift eller .spaces2 for innrykket utskrift.

Dette bevarer analyserte data gjennom en tur-retur-konvertering og er nyttig ved logging eller feilsøking.

val json = parse("{\"a\":1,\"b\":2}").toOption.get
println(json.noSpaces)
println(json.spaces2)

Kunnskapssjekk

Test forståelsen din av Circe-parsing.

Oppsummering

Du har lært å gjøre JSON-tekst om til Circes modell. parse gir Either[ParsingFailure, Json], mens decode[A] går direkte til en typet verdi.

HCursor navigerer med downField, og .as[A] henter ut typede verdier. Feil er verdier, ikke unntak.

Gratis å komme i gang

Lær deg Scala med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
39
Leksjoner
143

Ofte stilte spørsmål

Er leksjonen «Analyser JSON» gratis?

Ja – hele teksten i «Analyser JSON» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Scala for backendutvikling og funksjonell programmering-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.

Hva lærer jeg i «Analyser JSON»?

Gjør tekst om til JSON-verdier. Du øver på Scala for backendutvikling og funksjonell programmering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Scala for backendutvikling og funksjonell programmering?

Ingen tidligere erfaring er nødvendig. Scala for backendutvikling og funksjonell programmering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Analyser JSON»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Scala for backendutvikling og funksjonell programmering-leksjonen?

Ja. Alle Scala for backendutvikling og funksjonell programmering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Analyser JSON
  2. Dekod til case-klasser
  3. Kod til JSON
  4. Tilpassede codec-er
← Tilbake til Scala for backendutvikling og funksjonell programmering