Elm:
การทำงานกับ JSON

วิธีการ:

Elm จัดการการใช้งาน JSON ด้วยความชัดเจนและความปลอดภัย เริ่มต้นด้วยการใช้งานโมดูล Json.Decode และ Json.Encode ก่อนอื่นคุณจำเป็นต้องกำหนดตัวถอดรหัสสำหรับชนิดข้อมูลของคุณ สมมติว่าเรากำลังจัดการกับอ็อบเจ็กต์โปรไฟล์ผู้ใช้งานที่เรียบง่าย

ก่อนอื่น นิยามชนิดข้อมูลใน Elm ของคุณ:

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

การถอดรหัส JSON เป็น Elm

เพื่อถอดรหัสสตริง JSON เป็นชนิด 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)

เพื่อถอดรหัสอ็อบเจกต์ JSON:

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 เป็น JSON

เพื่อเข้ารหัสค่าของ Elm กลับเป็น JSON, ใช้โมดูล 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 เพื่อถอดรหัสสตริง JSON. -}

วิธีนี้ทำให้ตัวถอดรหัสเรียบง่ายขึ้น ทำให้โค้ดสะอาดและง่ายต่อการบำรุงรักษา โดยเฉพาะเมื่อโครงสร้างข้อมูลมีความซับซ้อนมากขึ้น.