Elm:
עבודה עם JSON

איך לעשות:

Elm מתייחס לטיפול ב-JSO‪N עם מפורשות ובטיחות, בעיקר באמצעות המודולים Json.Decode וJson.Encode. כדי להתחיל לעבוד עם JS‪ON, תצטרך להגדיר פענח לסוג הנתונים שלך. בואו נניח שאנו עוסקים באובייקט פרופיל משתמש פשוט.

ראשית, הגדר את סוג ה-Elm שלך:

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

פענוח JS‪ON ל-Elm

כדי לפענח מחרוזת JS‪ON לסוג UserProfile, צור פענח:

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

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

כדי לפענח אובייקט JS‪ON:

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

{- פלט לדוגמא:
Result.Ok { id = 1, name = "John Doe", email = "[email protected]" }
-}

קידוד Elm ל-JS‪ON

כדי לקודד ערך מ-Elm חזרה ל-JS‪ON, השתמש במודול 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

{-
שימוש:
encodeUserProfile { id = 1, name = "John Doe", email = "[email protected]" }

פלט לדוגמא:
"{"id":1,"name":"John Doe","email":"[email protected]"}"
-}

ספריות צד שלישי

חבילות Elm כמו elm-json-decode-pipeline יכולות לפשט את יצירת הפענחים באמצעות סגנון צינור, שמאוד נוח לפענוח אובייקטים מורכבים.

ראשית, הוסף את הספריה לפרויקט שלך:

elm install NoRedInk/elm-json-decode-pipeline

אז, אתה יכול לפשט את הגדרת הפענח כך:

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

{- השתמש בפענח הזה כמו קודם עם decodeString לפענוח מחרוזות JS‪ON. -}

גישה זו מפשטת את הפענח, הופכת את הקוד לנקי יותר וקל יותר לתחזוקה, במיוחד ככל שמבני הנתונים הופכים למורכבים יותר.