Elm:
Arbeiten mit JSON

Wie geht das:

Elm behandelt die JSON-Verarbeitung mit Explizitheit und Sicherheit, hauptsächlich unter Verwendung der Module Json.Decode und Json.Encode. Um mit JSON zu beginnen, müssen Sie zuerst einen Decoder für Ihren Datentyp definieren. Nehmen wir an, wir haben es mit einem einfachen Benutzerprofilobjekt zu tun.

Definieren Sie zunächst Ihren Elm-Typ:

type alias UserProfile = 
    { id : Int
    , name : String
    , email : String
    }

JSON in Elm dekodieren

Um eine JSON-Zeichenkette in den Typ UserProfile zu dekodieren, erstellen Sie einen Decoder:

import Json.Decode exposing (Decoder, int, string, field, map3)

userProfileDecoder : Decoder UserProfile
userProfileDecoder =
    map3 UserProfile
        (field "id" int)
        (field "name" string)
        (field "email" string)

Um ein JSON-Objekt zu dekodieren:

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

{- Beispiel Ausgabe:
Result.Ok { id = 1, name = "John Doe", email = "[email protected]" }
-}

Elm in JSON kodieren

Um einen Elm-Wert zurück in JSON zu kodieren, nutzen Sie das Modul 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

{-
Verwendung:
encodeUserProfile { id = 1, name = "John Doe", email = "[email protected]" }

Beispiel Ausgabe:
"{"id":1,"name":"John Doe","email":"[email protected]"}"
-}

Bibliotheken von Drittanbietern

Elm-Pakete wie elm-json-decode-pipeline können die Erstellung von Decodern mit einem Pipeline-Stil vereinfachen, was insbesondere beim Dekodieren komplexer Objekte praktisch ist.

Zuerst fügen Sie die Bibliothek zu Ihrem Projekt hinzu:

elm install NoRedInk/elm-json-decode-pipeline

Danach können Sie die Definition des Decoders wie folgt vereinfachen:

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

{- Verwenden Sie diesen Decoder wie zuvor mit decodeString, um JSON-Zeichenketten zu dekodieren. -}

Dieser Ansatz vereinfacht den Decoder, macht den Code sauberer und wartungsfreundlicher, besonders wenn die Datenstrukturen komplexer werden.