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