Elm:
Arbeider med JSON
Hvordan:
Elm behandler JSON-håndtering med tydelighet og sikkerhet, hovedsakelig ved å bruke modulene Json.Decode
og Json.Encode
. For å begynne å jobbe med JSON, må du først definere en dekoder for datatypen din. La oss anta at vi har med et enkelt brukerprofilobjekt å gjøre.
Definer først din Elm-type:
type alias UserProfile =
{ id : Int
, name : String
, email : String
}
Dekoding av JSON til Elm
For å dekode en JSON-streng til UserProfile
-typen, opprett en dekoder:
import Json.Decode exposing (Decoder, int, string, field, map3)
userProfileDecoder : Decoder UserProfile
userProfileDecoder =
map3 UserProfile
(field "id" int)
(field "name" string)
(field "email" string)
For å dekode et JSON-objekt:
import Json.Decode exposing (decodeString)
jsonString : String
jsonString =
"""{"id": 1, "name": "John Doe", "email": "john@example.com"}"""
decoded : Result String UserProfile
decoded =
decodeString userProfileDecoder jsonString
{- Eksempel på utdata:
Result.Ok { id = 1, name = "John Doe", email = "[email protected]" }
-}
Koding av Elm til JSON
For å kode en Elm-verdi tilbake til JSON, bruk modulen Json.Encode
.
import Json.Encode exposing (object, int, string)
encodeUserProfile : UserProfile -> String
encodeUserProfile userProfile =
object
[ ("id", int userProfile.id)
, ("name", string userProfile.name)
, ("email", string userProfile.email)
]
|> Json.Encode.encode 0
{-
Bruksmåte:
encodeUserProfile { id = 1, name = "John Doe", email = "[email protected]" }
Eksempel på utdata:
"{"id":1,"name":"John Doe","email":"[email protected]"}"
-}
Tredjepartsbiblioteker
Elm-pakker som elm-json-decode-pipeline
kan forenkle opprettelsen av dekodere ved å bruke en pipeline-stil, noe som er spesielt nyttig for dekoding av komplekse objekter.
Først, legg til biblioteket i prosjektet ditt:
elm install NoRedInk/elm-json-decode-pipeline
Deretter kan du forenkle definisjonen av dekoderen som følger:
import Json.Decode exposing (int, string, succeed)
import Json.Decode.Pipeline exposing (required, decode)
userProfileDecoder : Decoder UserProfile
userProfileDecoder =
decode UserProfile
|> required "id" int
|> required "name" string
|> required "email" string
{- Bruk denne dekoderen som før med decodeString for å dekode JSON-strenger. -}
Denne tilnærmingen forenkler dekoderen, noe som gjør koden renere og mer vedlikeholdbar, spesielt etter hvert som datastrukturene blir mer komplekse.