Scala til backendudvikling og funktionel programmering · Lektion

Pars JSON

Omdan tekst til JSON-værdier.

Lektion 1 af 413 trin

Pars JSON er en gratis Scala til backendudvikling og funktionel programmering-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Scala til backendudvikling og funktionel programmering, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Scala til backendudvikling og funktionel programmering-kurset indeholder 4 lektioner i alt.

Hvorfor Circe?

Circe er et populært JSON-bibliotek til Scala, bygget oven på det funktionelle økosystem cats.

Det lægger vægt på typesikkerhed og uforanderlighed: parsing returnerer en Either i stedet for at kaste en fejl, og afkodning producerer typede værdier i stedet for utypede maps.

Denne lektion gennemgår, hvordan du omdanner rå JSON-tekst til Circes Json-model.

Tilføjelse af afhængigheden

Circe leveres som flere moduler. Til parsing og kernemodellen skal du bruge circe-core og circe-parser.

Modulet circe-generic tilføjer automatisk afledning af kodeker, hvilket gennemgås i senere lektioner.

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

Funktionen parse

Indgangspunktet til at læse JSON er io.circe.parser.parse.

Den tager en String og returnerer Either[ParsingFailure, Json]. Venstresiden indeholder syntaksfejlene, mens højresiden indeholder det parsede træ.

import io.circe.parser._

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

Håndtering af parsefejl

Da parse returnerer en Either, håndterer du fejl eksplicit med mønstermatchning eller kombinatorer i stedet for try/catch.

En ParsingFailure indeholder en menneskeligt læsbar meddelelse, der beskriver syntaksproblemet.

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

Json-modellen

En værdi, der er parset korrekt, er en Json — et uforanderligt træ, der repræsenterer en af seks JSON-typer: objekt, array, streng, tal, boolsk værdi eller null.

Du undersøger den med prædikater som isObject eller folder over dens struktur.

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

Navigation med markøren

Hvis du vil læse indlejrede data, skal du kalde .hcursor på en Json-værdi. HCursor er en lynlåsstruktur, der lader dig bevæge dig gennem træet.

Brug downField til at gå ned i en objektnøgle.

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)

Udtræk af værdier med as

Når markøren står det rigtige sted, forsøger .as[A] at afkode den fokuserede værdi til typen A.

Den returnerer Either[DecodingFailure, A], så et typemismatch rapporteres som en værdi og ikke som en undtagelse.

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

parse kontra decode

Brug parse, når du vil have det rå Json-træ, som du selv kan undersøge.

Brug decode[A], når du vil gå direkte fra String til en typet værdi A i ét trin. Den kombinerer parsing og afkodning.

import io.circe.parser.decode

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

Valgfrie felter

JSON fra virkeligheden mangler ofte nøgler. Markørmetoden get[A] på et felt, du er gået ned i, fejler, hvis feltet mangler, mens getOrElse leverer en standardværdi.

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

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

Parsing af arrays

Du kan afkode et JSON-array direkte til en Scala-samling ved at anmode om List[A] eller Vector[A].

Circe mapper hvert element og stopper med en DecodingFailure, hvis et element har den forkerte type.

import io.circe.parser.decode

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

Formateret udskrift

Enhver Json-værdi kan gengives som tekst med .noSpaces for kompakt output eller .spaces2 for indrykket output.

Det bevarer de parsede data gennem en tur-retur-konvertering og er praktisk til logning eller fejlfinding.

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

Hurtigt tjek

Test din forståelse af parsing med Circe.

Opsummering

Du har lært at omdanne JSON-tekst til Circes model. parse giver Either[ParsingFailure, Json], mens decode[A] går direkte til en typet værdi.

HCursor navigerer med downField, og .as[A] udtrækker typede værdier. Fejl er værdier og ikke undtagelser.

Gratis at komme i gang

Lær Scala med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
143

Ofte stillede spørgsmål

Er lektionen “Pars JSON” gratis?

Ja — hele teksten til “Pars JSON” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Scala til backendudvikling og funktionel programmering-kurset, skal du opgradere til CoddyKit PRO. Scala til backendudvikling og funktionel programmering-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Pars JSON”?

Omdan tekst til JSON-værdier. Du øver dig i Scala til backendudvikling og funktionel programmering med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Scala til backendudvikling og funktionel programmering?

Der kræves ingen tidligere erfaring. Scala til backendudvikling og funktionel programmering på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Pars JSON”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Scala til backendudvikling og funktionel programmering-lektion?

Ja. Alle Scala til backendudvikling og funktionel programmering-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Pars JSON
  2. Dekod til case classes
  3. Kod til JSON
  4. Tilpassede codecs
← Tilbage til Scala til backendudvikling og funktionel programmering